JavaMail发送邮件

用JavaMail 实现发送邮件功能,在发送邮件之前,需要设置一下邮件服务器,端口,邮箱号和密码。

public class MailSenderInfo {

// 发送邮件的服务器的IP和端口 
private String mailServerHost; 
private String mailServerPort = "25"; 

// 邮件发送者的地址 
private String fromAddress; 

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

// 登陆邮件发送服务器的用户名和密码 
private String userName; 
private String password; 

// 是否需要身份验证 
private boolean validate = false; 

// 邮件主题 
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.transport.protocol", "smtp");                 //设置邮件的传输协议
  p.put("mail.smtp.auth", validate ? "true" : "false"); 
  return p; 
} 

// 省略getter 和 setter
}

指定以上信息后,就可以发送邮件了。

public static boolean sendHtmlMail(MailSenderInfo mailInfo) throws MessagingException {

    // 判断是否需要身份认证
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();

    // 如果需要身份认证,则创建一个密码验证器
    if (mailInfo.isValidate()) {
        authenticator = new MyAuthenticator(mailInfo.getUserName(),
                mailInfo.getPassword());
        System.out.println("用户名:"+mailInfo.getUserName());
    }

    // 根据邮件会话属性和密码验证器构造一个发送邮件的session
    Session sendMailSession = Session
            .getDefaultInstance(pro, authenticator);

    // 根据session创建一个邮件消息
    Message mailMessage = new MimeMessage(sendMailSession);

    // 创建邮件发送者地址
    Address from = new InternetAddress(mailInfo.getFromAddress());

    // 设置邮件消息的发送者
    mailMessage.setFrom(from);

    System.out.println("from 地址: " + mailInfo.getFromAddress() + ","
            + "to 地址:" + mailInfo.getToAddress());

    // 创建邮件的接收者地址,并设置到邮件消息中
    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=utf-8");

    mainPart.addBodyPart(html);

    // 附件文件
    String[] filePaths = mailInfo.getAttachFileNames();
    if (filePaths != null) {
        for (String filePath : filePaths) {
            MimeBodyPart mbp = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(filePath); // 得到数据源
            mbp.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart
            mbp.setFileName(fds.getName()); // 得到文件名同样至入BodyPart
            mainPart.addBodyPart(mbp);
        }
    }

    // 将MiniMultipart对象设置为邮件内容
    mailMessage.setContent(mainPart);

    // 发送邮件
    // Transport.send(mailMessage);

    Transport transport = sendMailSession.getTransport();
    // 连接邮件smtp服务器,参数分别为服务器地址,用户名和密码
    transport.connect(mailInfo.getMailServerHost(), mailInfo.getUserName(),
            mailInfo.getPassword());
    transport.sendMessage(mailMessage, mailMessage.getAllRecipients());

    // 关闭连接
    transport.close();

    return true;


}

如果邮箱服务器,端口和密码出错,将会导致用户认证失败,将抛出异常:javax.mail.AuthenticationFailedException,请检查服务器,端口和邮箱密码等。

本站总访问量