邮件发送
刚来公司时比较忙,现在有空把项目中用到的技术整理下,邮件发送现在各个地方都会用到,比如注册,修改密码,广告推送等等。之前网上也有很多种实现方式,我们使用的是javax.mail实现邮件发送。
发送文本邮件
不废话,直接上代码
相关依赖
<!--发送邮件需要的依赖包-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
</dependency>
给个人邮箱发送文本消息
/**
* 给某个邮箱发送邮件
* @param email 用户邮箱
* @param title 邮件标题
* @param content 邮件内容
* @throws Exception
*/
public static void sendMessage(String email,String title,String content) throws Exception {
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 设置环境信息
Session session = Session.getInstance(props);
// 创建邮件对象
Message msg = new MimeMessage(session);
//设置邮件主题
msg.setSubject(title);
// 设置邮件内容
msg.setText(content);
//设置收件人
msg.setRecipient(Message.RecipientType.TO,new InternetAddress(email));
// 设置发件人,并设置标头
msg.setFrom(new InternetAddress("service@***.com", "企卫网"));
// 获得链接
Transport transport = session.getTransport();
// 连接邮件服务器,这里设置发件人的邮箱和密码。如果是163的邮箱就把"smtp.qq.com"改成"smtp.163.com"
//其他的同理,不然连接不到邮件服务器,第三个参数是密码
transport.connect("smtp.***.com", "service@***.com", "***_753369");
// 发送邮件
transport.sendMessage(msg, new Address[]{new InternetAddress(email)});
// 关闭连接
transport.close();
}
群发文本消息
/**
* 邮件群发
* @param emails 群发邮件的邮件地址
* @param title 邮件主题
* @param content 邮件内容
* @throws Exception
*/
public static void sendMessages(String[] emails,String title,String content) throws Exception {
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 设置环境信息
Session session = Session.getInstance(props);
// 创建邮件对象
Message msg = new MimeMessage(session);
//设置邮件主题
msg.setSubject(title);
// 设置邮件内容
msg.setText(content);
// 设置发件人,并设置标头
msg.setFrom(new InternetAddress("service@***.com", "企卫网"));
// 获得链接
Transport transport = session.getTransport();
//创建群发列表
InternetAddress[] addresses = new InternetAddress[emails.length];
for (int i = 0; i < emails.length; i++) {
addresses[i] = new InternetAddress(emails[i]);
}
msg.setRecipients(Message.RecipientType.TO,addresses);
// 连接邮件服务器,这里设置发件人的邮箱和密码。如果是163的邮箱就把"smtp.qq.com"改成"smtp.163.com"
//其他的同理,不然连接不到邮件服务器
transport .connect("smtp.***.com", "service@***.com", "***_753369");
// 发送邮件
transport.sendMessage(msg, addresses);
// 关闭连接
transport.close();
}
发送文本内容以上的方法够用了,但是有时我们可能需要发送一些广告之类的邮件,那就需要发送html内容邮件
发送单个邮箱
/**
* 给某个邮箱发送html邮件
* @param email 用户邮箱
* @param title 邮件标题
* @param content 邮件内容
* @throws Exception
*/
public static void sendHtmlMessage(String email,String title,String content) throws Exception {
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 设置环境信息
Session session = Session.getInstance(props);
// 创建邮件对象
Message msg = new MimeMessage(session);
//设置邮件主题
msg.setSubject(title);
//设置收件人
msg.setRecipient(Message.RecipientType.TO,new InternetAddress(email));
// 设置发件人,并设置标头
msg.setFrom(new InternetAddress("service@***.com", "企卫网"));
// 设置邮件内容
//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含HTML内容的MimeBodyPart
//设置HTML内容
messageBodyPart.setContent(content,"text/html; charset=utf-8");
mainPart.addBodyPart(messageBodyPart);
msg.setContent(mainPart);
// 获得链接
Transport transport = session.getTransport();
// 连接邮件服务器,这里设置发件人的邮箱和密码。如果是163的邮箱就把"smtp.qq.com"改成"smtp.163.com"
//其他的同理,不然连接不到邮件服务器
transport
.connect("smtp.***.com", "service@***.com", "***_753369");
// 发送邮件
transport
.sendMessage(msg, new Address[]{new InternetAddress(email)});
// 关闭连接
transport.close();
}
群发html邮件
/**
* html邮件群发
* @param emails 群发邮件的邮件地址
* @param title 邮件主题
* @param content 邮件内容
* @throws Exception
*/
public static void sendHtmlMessages(List<String> emails, String title, String content) throws Exception {
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 设置环境信息
Session session = Session.getInstance(props);
// 创建邮件对象
Message msg = new MimeMessage(session);
//设置邮件主题
msg.setSubject(title);
// 设置邮件内容
//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含HTML内容的MimeBodyPart
//设置HTML内容
messageBodyPart.setContent(content,"text/html; charset=utf-8");
mainPart.addBodyPart(messageBodyPart);
msg.setContent(mainPart);
// 设置发件人,并设置标头
msg.setFrom(new InternetAddress("service@***.com", "企卫网"));
// 获得链接
Transport transport = session.getTransport();
//创建群发列表
InternetAddress[] addresses = new InternetAddress[emails.size()];
for (int i = 0; i < emails.size(); i++) {
addresses[i] = new InternetAddress(emails.get(i));
}
msg.setRecipients(Message.RecipientType.TO,addresses);
// 连接邮件服务器,这里设置发件人的邮箱和密码。如果是163的邮箱就把"smtp.qq.com"改成"smtp.163.com"
//其他的同理,不然连接不到邮件服务器
transport
.connect("smtp.***.com", "service@***.com", "***_753369");
// 发送邮件
transport
.sendMessage(msg, addresses);
// 关闭连接
transport.close();
}