JavaMail发送邮件简单实现

时间:2021-06-23 19:01:36

实现JavaMail发送邮件功能 ,这里共有三个类去实现。示例用的是企业版163邮箱。

一、邮件VO,代码如下:

public class MailVO {

// 发送邮件的服务器地址
private String mailServerHost;

// 发送邮件的服务器端口
private String mailServerPort;

// 登录发送邮件服务器的用户名
private String userName;

// 登录发送邮件服务器的密码
private String password;

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

// 邮件接收者地址
private String[] mailTo;

// 邮件抄送地址
private String[] mailCC;

// 邮件密送地址
private String[] mailBCC;

// 是否需要安全验证
private boolean validation = true;

// 邮件主题
private String subject;

// 邮件内容
private String content;

// 邮件附件的文件名
private String[] attachFileNames;

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

/** 以下为getter和setter,这里省略 */

}


二、邮件密码验证器,继承自javax.mail.Authenticator,并重写getPasswordAuthentication()方法,代码如下:

public class MyAuthenticator extends Authenticator {

private String userName = null;

private String password = null;

public RainbowAuthenticator() {
}

public RainbowAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
}

protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.userName, this.password);
}

}


三、发送邮件

public class MailSender {

public boolean sendMail(MailVO mailVO) {
System.out.println("====================开始发送====================");
if (null == mailVO) {
return false;
}
boolean flag = true;
// 邮件会话
Session mailSession = null;
if (mailVO.isValidation()) {
MyAuthenticator authenticator = new MyAuthenticator(
mailVO.getUserName(), mailVO.getPassword());
mailSession = Session.getDefaultInstance(
mailVO.getSessionProperties(), authenticator);
} else {
mailSession = Session.getDefaultInstance(mailVO
.getSessionProperties());
}
try {
// 邮件消息器
Message message = new MimeMessage(mailSession);
// 邮件发送地址
Address from = new InternetAddress(mailVO.getFromAddress());
message.setFrom(from);
// 邮件收件人地址
if (null != mailVO.getMailTo()) {
for (String to : mailVO.getMailTo()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, address);
}
}
// 邮件抄送人地址
if (null != mailVO.getMailCC()) {
for (String to : mailVO.getMailCC()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.CC, address);
}
}
// 邮件密送人地址
if (null != mailVO.getMailBCC()) {
for (String to : mailVO.getMailBCC()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.BCC, address);
}
}
// 邮件主题
message.setSubject(mailVO.getSubject());
// 邮件发送时间
message.setSentDate(new Date());
// 设置自动解析html格式的内容
message.setContent(mailVO.getContent(), "text/html;charset=utf-8");
// 发送邮件
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
System.out.println("====================结束发送====================");
return flag;
}
}


四、测试类。这里用的是企业版163邮箱,邮件发送服务器地址为:smtp.qiye.163.com,端口号:25,代码如下:

public class Test {

public static void main(String[] args) {
MailVO mailVO = new MailVO();
mailVO.setMailServerHost("smtp.qiye.163.com");
mailVO.setMailServerPort("25");
mailVO.setUserName("abc@163.com");
mailVO.setPassword("******");
mailVO.setFromAddress("abc@163.com");
mailVO.setMailTo(new String[] { "def@163.com" });
mailVO.setSubject("测试邮件标题");
mailVO.setContent("<p>这是一封测试邮件,百度地址为:<a href=\"www.baidu.com\">www.baidu.com</a></p>");
MailSender sender = new MailSender();
System.out.println(sender.sendMail(mailVO));
}
}