packagecom.syy.community._gaowenbin.util;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.Properties;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.Authenticator;importjavax.mail.Message;importjavax.mail.MessagingException;importjavax.mail.PasswordAuthentication;importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.internet.InternetAddress;importjavax.mail.internet.MimeBodyPart;importjavax.mail.internet.MimeMessage;importjavax.mail.internet.MimeMultipart;/***
* 邮件发送的工具类
*@authorHUAWEI
**/
public classMailUtil {/*** 创建简单的文本邮件
*@paramsession
*@parammailfrom 邮件发送方地址 eg.xx@qq.com
*@parammailTo 邮件接收方地址,eg.xx@qq.com
*@parammailTittle 邮件标题
*@parammailText 邮件文本主体
*@return*@throwsException*/
public staticMimeMessage createSimpleMail(Session session, String mailfrom, String mailTo, String mailTittle,
String mailText)throwsException {//创建邮件对象
MimeMessage message = newMimeMessage(session);//指明邮件的发件人
message.setFrom(newInternetAddress(mailfrom));//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, newInternetAddress(mailTo));//邮件的标题
message.setSubject(mailTittle);//邮件的文本内容
message.setContent(mailText, "text/html;charset=UTF-8");//返回创建好的邮件对象
returnmessage;
}/*** 创建图文邮件
*@paramsession
*@parammailMap 邮件的所有内容的包装
*@paramhasfujian 若为true,mailMap中必须包含相应的信息
*@return*@throwsMessagingException*/
public static MimeMessage imageMail(Session session,Map mailMap,boolean hasfujian) throwsMessagingException {//消息的固定信息
MimeMessage mimeMessage = newMimeMessage(session);//邮件发送人
mimeMessage.setFrom(new InternetAddress(mailMap.get("from").toString()));//邮件接收人,可以同时发送给很多人
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(mailMap.get("to").toString()));
mimeMessage.setSubject(mailMap.get("title").toString()); //邮件主题//图片
MimeBodyPart body1 = newMimeBodyPart();
body1.setDataHandler(new DataHandler(new FileDataSource(mailMap.get("datasrc").toString())));
body1.setContentID(mailMap.get("contentid").toString()); //图片设置ID//文本
MimeBodyPart body2 = newMimeBodyPart();
body2.setContent(mailMap.get("content"),"text/html;charset=utf-8");if(hasfujian){
List> listmap = (List>) mailMap.get("fujian");
List fjlist = new ArrayList();for(Mapitem:listmap){//附件
MimeBodyPart body = newMimeBodyPart();
body.setDataHandler(new DataHandler(new FileDataSource(item.get("filesrc").toString())));
body.setFileName(item.get("filename")); //附件设置名字
fjlist.add(body);//拼装邮件正文内容
MimeMultipart multipart1 = newMimeMultipart();
multipart1.addBodyPart(body1);
multipart1.addBodyPart(body2);
multipart1.setSubType("related"); //文本和图片内嵌成功!//new MimeBodyPart().setContent(multipart1);//将拼装好的正文内容设置为主体
MimeBodyPart contentText = newMimeBodyPart();
contentText.setContent(multipart1);//拼接附件
MimeMultipart allFile =newMimeMultipart();for(MimeBodyPart mbp:fjlist){
allFile.addBodyPart(mbp);//附件
}
allFile.addBodyPart(contentText);//正文
allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;//放到Message消息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges();//保存修改
}
}else{//拼装邮件正文内容
MimeMultipart multipart1 = newMimeMultipart();
multipart1.addBodyPart(body1);
multipart1.addBodyPart(body2);
multipart1.setSubType("related"); //1.txt.文本和图片内嵌成功!//new MimeBodyPart().setContent(multipart1);//将拼装好的正文内容设置为主体
MimeBodyPart contentText = newMimeBodyPart();
contentText.setContent(multipart1);//拼接附件
MimeMultipart allFile =newMimeMultipart();
allFile.addBodyPart(contentText);//正文
allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;//放到Message消息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges();//保存修改
}returnmimeMessage;
}/*** 发送邮件方法封装
*@paramcontentMap 邮件配置的map
*@paramimgmial 是否为带图邮件
*@paramhasfujian 是否有附件
*@throwsException*/
public static void sendMail(final Map contentMap,boolean imgmial,boolean hasfujian) throwsException{
Properties prop= newProperties();//设置QQ邮件服务器
prop.setProperty("mail.host", contentMap.get("host").toString());//邮件发送协议
prop.setProperty("mail.transport.protocol", "smtp");//需要验证用户名密码
prop.setProperty("mail.smtp.auth", "true");//关于QQ邮箱,还要设置SSL加密,加上以下代码即可//MailSSLSocketFactory sf = new MailSSLSocketFactory();//sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");//prop.put("mail.smtp.ssl.socketFactory", sf);//使用JavaMail发送邮件的5个步骤//1.txt、创建定义整个应用程序所需的环境信息的Session对象
Session session = Session.getDefaultInstance(prop, newAuthenticator() {publicPasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名、授权码
return new PasswordAuthentication(contentMap.get("from").toString(),
contentMap.get("password").toString());
}
});//可以通过session开启Dubug模式,查看所有的过程
session.setDebug(true);//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
Transport tp =session.getTransport();//3.连接服务器,需要抛出异常;
tp.connect(contentMap.get("host").toString(),contentMap.get("from").toString(),contentMap.get("password").toString());
MimeMessage mimeMessage= null;//4.连接上之后我们需要发送邮件;
if(imgmial){
mimeMessage=imageMail(session,contentMap,hasfujian);
}else{
mimeMessage= createSimpleMail(session, contentMap.get("from").toString(), contentMap.get("to").toString(), contentMap.get("title").toString(), contentMap.get("content").toString());
}//5.发送邮件
tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//6.关闭连接
tp.close();
}
}