springboot_邮件
2021-05-13 09:29
标签:char == public prope tar dem pat 防止 service pom依赖: 工具: 测试: springboot_邮件 标签:char == public prope tar dem pat 防止 service 原文地址:https://www.cnblogs.com/canzhen/p/13087808.htmlpackage com.canzhen.mail.util;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
import javax.mail.internet.MimeUtility;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
public class MultiEmailUtil {
private Properties props;//用来存储一些邮件的属性,设置几个等待时间什么的。
private String[] params = new String[2];//用来存储发件人和授权码
/**
* @param transportType 邮件发送方式
* @param serviceType 服务器类型
* @param servicePort 服务器端口号
* @param fromEMail 发件人
* @param authPassword 授权码
*/
public MultiEmailUtil(String transportType, String serviceType, String servicePort, String fromEMail , String authPassword)
{
// // 获取默认的 Session 对象。
// 1.创建一个程序与邮件服务器会话对象 Session
Properties tProps = new Properties();
tProps.put("mail.transport.protocol", transportType);
tProps.put("mail.smtp.host",serviceType );//smtp.exmail.qq.com 这个例子是qq的企业邮箱的服务器
tProps.put("mail.smtp.port", servicePort);//一般默认都是 25
// 指定验证为true
tProps.setProperty("mail.smtp.auth", "true");
// props.setProperty("mail.smtp.timeout","1000");
tProps.put("mail.smtp.timeout", 100000);//这几个参数很有必要
tProps.put("mail.smtp.connectiontimeout", 100000);//这几个参数很有必要
tProps.put("mail.smtp.writetimeout",100000);//这几个参数很有必要
props = (Properties) tProps.clone();
params[0]=fromEMail;//如果可以最好弄一个加密的方式
params[1]=authPassword;//如果可以最好弄一个加密的方式
}
/***
*
* @param mailTO 收件人集合,这个不可以为空,哈哈哈
* @param mailCC 抄送人集合,可以传null,若果是null就当做没有抄送
* @param contentTop 邮件标题,可以传null,默认值是 "您有,一封邮件待查收"
* @param contentText 邮件正文,可以传null,默认值是 "各位好:"
* @param fileName 附件的绝对地址,可以传null,如果是null就默认当做不添加附件
*/
public boolean sendEmail(String[] mailTO,String[] mailCC,String contentTop,String contentText,String fileName)
{
//收件人不能是空
if (mailTO == null || mailTO.length == 0)
return false;
// 认证
Authenticator auth = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(params[0], params[1]);
}
};
Session session = Session.getInstance(props, auth);//居然发现了一个final的类,和String一样,哈哈
try{
// 创建默认的 MimeMessage 对象。
MimeMessage message = new MimeMessage(session);
// Set From: 发件人,头部头字段
message.setFrom(new InternetAddress(params[0]));
Address addressesTO[] = new Address[mailTO.length];
//循环收件人
for (int i = 0; i )
{
addressesTO[i] = (Address) new InternetAddress(mailTO[i]).clone();
}
message.addRecipients(Message.RecipientType.TO,addressesTO);//设置收件人
//对抄送人进行处理
if( ! (mailCC == null|| mailCC.length == 0)) {
Address addressesCC[] = new Address[mailCC.length];
//循环抄送人
for (int i = 0; i )
{
addressesCC[i] = (Address) new InternetAddress(mailCC[i]).clone();
}
message.addRecipients(Message.RecipientType.CC, addressesCC);//设置抄送人
}
// Set Subject: 头字段
if(contentTop == null || contentTop.equals(""))
{
message.setSubject("您有,一封邮件待查收");
}else {
message.setSubject(contentTop);
}
// 创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
// 消息
if(contentText == null || contentText.equals("")){
messageBodyPart.setText("各位好:");
}else{
messageBodyPart.setText(contentText);
}
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 设置文本消息部分
multipart.addBodyPart(messageBodyPart);
// String tFileName = fileName;
//目前没有对目录做校验,后续再添加吧
if (!( fileName == null || fileName.equals(""))){
// 附件部分
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileName);
messageBodyPart.setDataHandler(new DataHandler(source));
//就只这行可以防止乱码
String newFileName = MimeUtility.encodeText(source.getName(),"utf-8",null);
messageBodyPart.setFileName(newFileName);
multipart.addBodyPart(messageBodyPart);
}
// 发送完整消息
message.setContent(multipart,"text/html;charset=utf-8");
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException | UnsupportedEncodingException mex) {
mex.printStackTrace();
}
return true;
}
}
package com.canzhen.mail.test;
import com.canzhen.mail.util.MultiEmailUtil;
public class mailTest {
public static void main(String[] args) {
String[] mailTO = {"XXX@qq.com"};//收件人
String[] mailCC = {"XXX@qq.com"};//抄送人
String contentTop = "这是一个邮件的题目";
String contentText = "这是这个邮件的正文";
String fileName = "E:\\桌面壁纸\\哈哈.png";//如果有附件的话这填写地址
new MultiEmailUtil("SMTP","smtp.qq.com","25","XXX@qq.com",
"XXX").sendEmail(mailTO,mailCC,contentTop,contentText,fileName);
}
}