JavaMail(1)――使用SMTP协议发送简单邮件

关键技术:


javax.mail.Session:定义了一个基本邮件回话,是JavaMail API最高层入口类。所有其他类都是经由这个Session才得以生效。Session对象用java.util.Properties对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其他信息。


java.mail.Message:存储邮件的消息内容,因为它是抽象类,必须用一个子类,最常用的子类是javax.mail.internet.MimeMessage,它支持MIME格式的邮件,MIME是多用途Internet邮件扩充协议,扩充基本的面向文本的Internet邮件系统,可以再消息中包含二进制附件。


javax.mail.Address:用于确定邮件的地址。Address是个抽象类,一般使用javax.mail.internet.InternetAddress类。


javax.mail.Authenticator:JavaMail API可以利用Authenticator通过用户名和密码访问邮件服务器。Authenticator是抽象类,需要先定义它的子类,并重写它的getPasswordAuthentication方法,在方法中返回PasswordAuthentication实例。子类对象创建后,需要向Sesstion注册Authenticator。在需要身份认证的时候,Session就会通知Authenticator。


javax.mail.Transport:调用Transport的send静态方法可以发送邮件,参数为一个Message对象。 


import java.util.Properties;

/**

 * 发送邮件需要使用的基本信息
*/
publicclass MailSenderInfo {
// 发送邮件的服务器的IP和端口

private String mailServerHost;
private String mailServerPort = "25";
// 邮件发送者的地址

private String fromAddress;
// 邮件接收者的地址

private String toAddress;

// 登陆邮件发送服务器的用户名和密码

private String userName;
private String password;
// 是否需要身份验证

privateboolean validate = true;

// 邮件主题

private String subject;
// 邮件的文本内容

private String content;

// 邮件附件的文件名

private String[] attachFileNames;


/**

     * 获得邮件会话属性
*/
public Properties getProperties(){
        Properties p = new Properties();
        p.put("mail.smtp.host", this.mailServerHost);
        p.put("mail.smtp.port", this.mailServerPort);
        p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
    }

public String getMailServerHost() {
return mailServerHost;
    }
publicvoid setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
    }
public String getMailServerPort() {
return mailServerPort;
    }
publicvoid setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
    }
publicboolean isValidate() {
return validate;
    }
publicvoid setValidate(boolean validate) {
this.validate = validate;
    }
public String[] getAttachFileNames() {
return attachFileNames;
    }
publicvoid setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
    }
public String getFromAddress() {
return fromAddress;
    }
publicvoid setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
    }
public String getPassword() {
return password;
    }
publicvoid setPassword(String password) {
this.password = password;
    }
public String getToAddress() {
return toAddress;
    }
publicvoid setToAddress(String toAddress) {
this.toAddress = toAddress;
    }
public String getUserName() {
return userName;
    }
publicvoid setUserName(String userName) {
this.userName = userName;
    }
public String getSubject() {
return subject;
    }
publicvoid setSubject(String subject) {
this.subject = subject;
    }
public String getContent() {
return content;
    }
publicvoid setContent(String textContent) {
this.content = textContent;
    } 


}





import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**

 * 邮件身份认证器,在发送邮件时使用
*/
publicclass MyAuthenticator extends Authenticator{
// 登陆发送邮件服务器的用户名

private String userName;
// 登陆发送邮件服务器的密码

private String password;
public MyAuthenticator(String userName, String password){
this.userName = userName;
this.password = password;
    }
/**

     * 覆盖父类的该方法,获得密码认证器
*/
protected PasswordAuthentication getPasswordAuthentication() {
returnnew PasswordAuthentication(userName, password);
    }

public String getPassword() {
return password;
    }
publicvoid setPassword(String password) {
this.password = password;
    }
public String getUserName() {
return userName;
    }
publicvoid setUserName(String userName) {
this.userName = userName;
    }
}




import java.util.Date;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**

 * 简单邮件(不带附件的邮件)发送器
*/
publicclass SimpleMailSender {
/**

     * 以文本格式发送邮件
     * 
@param mailInfo    待发送的邮件的信息
*/
publicstaticboolean sendTextMail(MailSenderInfo mailInfo) {
// 判断是否需要身份认证

        MyAuthenticator authenticator = null;
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器

            authenticator = new MyAuthenticator(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
// 根据邮件会话属性和密码验证器构造一个发送邮件的session

        Session sendMailSession = Session.getInstance(mailInfo
                .getProperties(), authenticator);
try {
// 根据session创建一个邮件消息

            Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址

            Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者

            mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中

            Address to = new InternetAddress(mailInfo.getToAddress());
            mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题

            mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间

            mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容

            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent);

// 发送邮件

            Transport.send(mailMessage);
returntrue;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
returnfalse;
    }

/**

     * 以HTML格式发送邮件
     * 
@param mailInfo    待发送的邮件信息
*/
publicstaticboolean sendHtmlMail(MailSenderInfo mailInfo){
// 判断是否需要身份认证

        MyAuthenticator authenticator = null;
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器

            authenticator = new MyAuthenticator(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
// 根据邮件会话属性和密码验证器构造一个发送邮件的session

        Session sendMailSession = Session.getInstance(mailInfo
                .getProperties(), authenticator);
try {
// 根据session创建一个邮件消息

            Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址

            Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者

            mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中

            Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO

            mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题

            mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间

            mailMessage.setSentDate(new Date());

// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象

            Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart

            BodyPart html = new MimeBodyPart();
// 设置HTML内容

            html.setContent(mailInfo.getContent(), "text/html; charset=GBK");
            mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容

            mailMessage.setContent(mainPart);
// 发送邮件

            Transport.send(mailMessage);
returntrue;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
returnfalse;
    }

publicstaticvoid main(String[] args) {
// 创建邮件信息

        MailSenderInfo mailInfo = new MailSenderInfo();
        mailInfo.setMailServerHost("smtp.sina.com.cn");
        mailInfo.setMailServerPort("25");
        mailInfo.setValidate(true);
        mailInfo.setUserName("***");
        mailInfo.setPassword("***");
        mailInfo.setFromAddress("***@sina.com");
        mailInfo.setToAddress("***@163.com");
        mailInfo.setSubject("MyMail测试");
        mailInfo.setContent("我的邮件测试/n/rMy test mail/n/r");

// 以文本格式发送邮件

        SimpleMailSender.sendTextMail(mailInfo);
// 以HTML格式发送邮件

        SimpleMailSender.sendHtmlMail(mailInfo);
    }
}

 

 

你可能感兴趣的:(internet,应用程序,用户名,邮件服务器,邮件系统)