SMTP 发送邮件
package com.chengyi.common.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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 javax.mail.util.ByteArrayDataSource;
import org.springframework.stereotype.Service;
@Service
public class MailService {
// 发送邮件String emailMsg,String users
public static void sendMail(String users, String msg, String title, String passWord) throws AddressException, MessagingException, UnsupportedEncodingException {
Message message = initMailInfo(passWord);
new InternetAddress();
InternetAddress[] internetAddressTo = InternetAddress.parse(users);
// 设置发送方式与接收者多人
message.setRecipients(MimeMessage.RecipientType.TO, internetAddressTo);
// 设置主题
message.setSubject(title);
// 设置内容
message.setContent(msg, "text/html;charset=utf-8");
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
private static Message initMailInfo(String passWord) throws AddressException, MessagingException {
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTP");
props.setProperty("mail.smtp.host", "***");
props.setProperty("mail.smtp.port", "**");
props.setProperty("mail.smtp.ssl.enable", "true");
// 指定验证为true
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.timeout", "12000");
// 验证账号及密码,密码需要是第三方授权码
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("*@*.com", passWord);//""
}
};
Session session = Session.getInstance(props, auth);
session.setDebug(true);
// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
// 设置发送者
message.setFrom(new InternetAddress("qq.com"));
return message;
}
public static void sendMail(String users, String msg, String title, InputStream is, String passWord) throws AddressException, MessagingException, IOException {
Message message = initMailInfo(passWord);
new InternetAddress();
InternetAddress[] internetAddressTo = InternetAddress.parse(users);
// 设置发送方式与接收者多人
message.setRecipients(MimeMessage.RecipientType.TO, internetAddressTo);
// 设置主题
message.setSubject(title);
// 6. 创建邮件内容"节点"
MimeBodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setContent(msg, "text/html;charset=UTF-8");
// 添加附件节点
MimeBodyPart fileBodyPart = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(is, "application/msexcel");
// 添加附件的内容
fileBodyPart.setDataHandler(new DataHandler(source));
// 添加附件的标题
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
MimeMultipart multipart = new MimeMultipart();
// fileBodyPart.setFileName(MimeUtility.encodeText(title + ".xls")); 加了这个编码转换 订单反而 有问题
// 这个我也不知道为什么 有时候这样 有时候不会
fileBodyPart.setFileName(MimeUtility.encodeText(title + ".xls"));
multipart.addBodyPart(fileBodyPart);
multipart.addBodyPart(textBodyPart);
message.setContent(multipart);
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
public static void sendMail(String users, String ccAdresses, String msg, String title, InputStream is, String passWord) throws AddressException, MessagingException, IOException {
Message message = initMailInfo(passWord);
new InternetAddress();
InternetAddress[] internetAddressTo = InternetAddress.parse(users);
InternetAddress[] internetAddressCC = InternetAddress.parse(ccAdresses);
// 设置发送方式与接收者多人
message.setRecipients(MimeMessage.RecipientType.TO, internetAddressTo);
//增加抄送人员
message.setRecipients(MimeMessage.RecipientType.CC, internetAddressCC);
// 设置主题
message.setSubject(title);
// 6. 创建邮件内容"节点"
MimeBodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setContent(msg, "text/html;charset=UTF-8");
// 添加附件节点
MimeBodyPart fileBodyPart = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(is, "application/msexcel");
// 添加附件的内容
fileBodyPart.setDataHandler(new DataHandler(source));
// 添加附件的标题
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
MimeMultipart multipart = new MimeMultipart();
fileBodyPart.setFileName(MimeUtility.encodeText(title + ".xls"));
multipart.addBodyPart(fileBodyPart);
multipart.addBodyPart(textBodyPart);
message.setContent(multipart);
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
}
上面是邮件工具类 下面是调用方法
1 /** 2 * 每天中午一点半 执行 3 */ 4 @Scheduled(cron = "0 30 13 ? * *") // 本地注释掉 5 // @Scheduled(cron = "0 0/1 * * * ?") // 本地注释掉 测试 一分钟执行一次 6 public void scheduleEvaluationNotice() { 7 8 String serverIP = ""; 9 try { 10 InetAddress address = InetAddress.getLocalHost(); 11 serverIP = address.getHostAddress(); 12 } catch (UnknownHostException e) { 13 e.printStackTrace(); 14 } 15 String code = sysParameterMapper.queryvalue(ConstantsParameter.TIMECONTROLLER_IDENTIFICATION_fACTORY_CODE); 16 if (serverIP.equals("") ) { // 判断服务器IP 17 18 19 try { 20 Date date = new Date(); 21 SimpleDateFormat dateFm = new SimpleDateFormat("E"); 22 String currSun = dateFm.format(date); 23 24 int weekday = 0; 25 if (currSun.equals("星期一")) { 26 weekday = 0; 27 } else if (currSun.equals("星期二")) { 28 weekday = 1; 29 } else if (currSun.equals("星期三")) { 30 weekday = 2; 31 } else if (currSun.equals("星期四")) { 32 weekday = 3; 33 } else if (currSun.equals("星期五")) { 34 weekday = 4; 35 } else if (currSun.equals("星期六")) { 36 weekday = 5; 37 } else if (currSun.equals("星期日")) { 38 weekday = 6; 39 } 40 41 log.info("判断是否发送邮件 " + date + "--" + currSun + "--" + count + "" + " \r\n"); 42 if (Integer.parseInt(count) == weekday) { 43 sendMail(); 44 } 45 } catch (Exception e) { 46 log.info("发送失败\r\n"); 47 System.out.println(e) 48 49 } 50 } 51 52 } 53 54 public void sendMail() { 55 ExcelGenerate excelGenerate = null; 56 try { 57 List<Object> export2 = rbbSchedulingService.getExport(new ScheduleEvaluationModel(), "考评", excelGenerate, "Y"); 58 ExcelGenerate export = (ExcelGenerate) export2.get(0); 59 @SuppressWarnings("unchecked") 60 List<ScheduleEvaluationModel> list2 = (List<ScheduleEvaluationModel>) export2.get(1); 61 // 获取输出流 62 InputStream input = null; 63 64 // 获取输出流 65 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 66 export.write(bos); 67 input = new ByteArrayInputStream(bos.toByteArray()); 68 69 List<String> mailaddress = mstOrganizationMailMapper.getMailaddress(); 70 if (mailaddress.size() > 0) { 71 String users = String.join(",", mailaddress); 72 73 MailService.sendMail(users, getTableStart(list2).toString(), "系统自动发送", input, sysParameterMapper.queryvalue(ConstantsParameter.EXMAIL_PASSWORD)); 74 log.info("发送成功\r\n"); 75 } 76 } catch (Exception e) { 77 log.info("发送失败\r\n"); 78 System.out.println(e); 79 } 80 81 } 82 83 public StringBuilder getTableStart(List<ScheduleEvaluationModel> list2) { 84 StringBuilder table = new StringBuilder(); 85 table.append(" <html>"); 86 table.append(" <head>"); 87 table.append(" <title> New Document </title>"); 88 table.append(" </head>"); 89 table.append(" <body>"); 90 table.append("***********略***************"); 91 92 table.append(" </table></body></html> "); 93 return table; 94 }
这两个搭配使用

浙公网安备 33010602011771号