importjava.io.File;importjava.io.UnsupportedEncodingException;importjava.util.Properties;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.Authenticator;importjavax.mail.BodyPart;importjavax.mail.Message.RecipientType;importjavax.mail.MessagingException;importjavax.mail.Multipart;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;importjavax.mail.internet.MimeUtility;public classMailUtil {/*** @Description: 使用QQ邮箱发送不带附件的邮件,收件人邮箱类型不限。
* @date: 2019年12月17日 下午4:51:01
*@author: ggwudivs
*@paramsubject 邮件标题
*@paramcontent 邮件内容
*@paramfromUser 发件人邮箱
*@paramfromPass 发件人邮箱密码,应为16位SMTP口令
*@paramtO_Recipients 收件人邮箱,多个收件人用","分隔
*@paramopenSSL 是否开启SSL
*@throwsUnsupportedEncodingException
*@throwsMessagingException:
*@return: void*/
public static void sendMessage_QQ (String subject, String content, String fromUser, String fromPass, String tO_Recipients, boolean openSSL) throwsUnsupportedEncodingException, MessagingException{
sendMessage(subject, content, fromUser, fromPass,null, tO_Recipients, null, null, "smtp.qq.com", openSSL?"465":"587", null, openSSL);
}/*** @Description: 使用QQ邮箱发送带附件的邮件,收件人邮箱类型不限。
* @date: 2019年12月17日 下午5:25:14
*@author: ggwudivs
*@paramsubject 邮件标题
*@paramcontent 邮件内容
*@paramfromUser 发件人邮箱
*@paramfromPass 发件人邮箱密码,应为16位SMTP口令
*@paramtO_Recipients 收件人邮箱,多个收件人用","分隔
*@paramattachmentFilesPath 邮件附件路径,多个附件用","分隔
*@paramopenSSL 是否开启SSL
*@throwsUnsupportedEncodingException
*@throwsMessagingException:
*@return: void*/
public static void sendMessage_QQ (String subject, String content, String fromUser, String fromPass, String tO_Recipients, String attachmentFilesPath, boolean openSSL) throwsUnsupportedEncodingException, MessagingException{
sendMessage(subject, content, fromUser, fromPass,null, tO_Recipients, null, null, "smtp.qq.com", openSSL?"465":"587", attachmentFilesPath, openSSL);
}/*** @Description: smtp发送邮件
* @date: 2019年12月17日 下午3:22:35
*@author: ggwudivs
*@paramsubject 邮件标题
*@paramcontent 邮件文本内容
*@paramfromUser 发件人邮箱
*@paramfromPass 发件人邮箱密码,QQ邮箱应为16位SMTP口令
*@paramnickname 发件人昵称
*@paramtO_Recipients 收件人邮箱,多个收件人用","分隔
*@paramcC_Recipients 抄送人邮箱,多个抄送人用","分隔
*@parambCC_Recipients 密送人邮箱,多个密送人用","分隔
*@paramsmtpHost smtp服务器地址
*@paramsmtpPort smtp服务器端口
*@paramattachmentFilesPath 邮件附件路径,多个附件用","分隔
*@throwsMessagingException
*@throwsUnsupportedEncodingException:
*@return: void*/
public static void sendMessage(String subject, String content, String fromUser, String fromPass, String nickname, String tO_Recipients, String cC_Recipients, String bCC_Recipients, String smtpHost, String smtpPort, String attachmentFilesPath, boolean openSSL) throwsMessagingException, UnsupportedEncodingException {//创建Properties类,用于记录邮箱的一些属性
Properties props = newProperties();//表示SMTP发送邮件,必须进行身份验证
props.put("mail.smtp.auth", "true");//SMTP服务器地址
props.put("mail.smtp.host", smtpHost);//是否开启SSL
if(!openSSL){//SMTP服务器端口号
props.put("mail.smtp.port", smtpPort);
}else{//SMTP服务器ssl端口号
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}//构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = newAuthenticator() {protectedPasswordAuthentication getPasswordAuthentication() {//发件人账号,发件人密码(QQ邮箱应为16位SMTP口令)
return newPasswordAuthentication(fromUser, fromPass);
}
};//使用环境属性和授权信息,创建邮件会话
Session mailSession =Session.getInstance(props, authenticator);//创建邮件消息
MimeMessage message = newMimeMessage(mailSession);//设置发件人,有昵称时同时设置昵称
try{
message.setFrom((nickname==null||"".equals(nickname))?new InternetAddress(fromUser):new InternetAddress(fromUser, nickname, "UTF-8"));
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}//设置一个或多个收件人
message.setRecipients(RecipientType.TO, tO_Recipients);//设置一个或多个抄送人
message.setRecipients(RecipientType.CC, cC_Recipients);//设置一个或多个密送人
message.setRecipients(RecipientType.BCC, bCC_Recipients);//设置邮件标题
message.setSubject(subject);//设置邮件的内容
if(attachmentFilesPath == null || "".equals(attachmentFilesPath)){//设置邮件的正文文本
message.setContent(content, "text/html;charset=UTF-8");
}else{//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = newMimeMultipart();//添加邮件文本内容
BodyPart contentBodyPart = newMimeBodyPart();
contentBodyPart.setContent(content,"text/html;charset=utf-8");
multipart.addBodyPart(contentBodyPart);//添加邮件附件内容
BodyPart attachmentBodyPart = newMimeBodyPart();
String[] attachmentFiles= attachmentFilesPath.split(",");for(String attachmentFile : attachmentFiles) {if (attachmentFile != null && !"".equals(attachmentFile)) {
attachmentBodyPart= newMimeBodyPart();//根据附件路径获取文件,
FileDataSource dataSource = new FileDataSource(newFile(attachmentFile));
attachmentBodyPart.setDataHandler(newDataHandler(dataSource));//MimeUtility.encodeWord可以避免文件名乱码
String strFileName=dataSource.getFile().getName();
attachmentBodyPart.setFileName(MimeUtility.encodeText(strFileName));
multipart.addBodyPart(attachmentBodyPart);
}
}//设置邮件的正文内容
message.setContent(multipart);
}//发送邮件
Transport.send(message);
}
}