yml文件配置 spring: mail: host: smtp.163.com username: xing_a810@163.com password: xingli810 default-encoding: UTF-8 protocol: smtp properties.mail.smtp.auth: true properties.mail.smtp.port: 994 #465或者994 properties.mail.display.sendmail: Javen properties.mail.display.sendname: Spring Boot Guide Email properties.mail.smtp.starttls.enable: true properties.mail.smtp.starttls.required: true properties.mail.smtp.ssl.enable: true
本來想直接寫一個工具類的,可是忽然發現JavaMailSender使用@Autowired引入的話會發生這個JavaMailSender爲null的狀況,按照http://www.javashuo.com/article/p-pyqagdir-dg.html改正後發現若是是一個工具類接口必須是靜態的,而後就改爲實現類的寫法html
public interface xxxService { void sendEmail(String text); }
@Component
@Service
public class OrderEmailServiceImpl implements OrderEmailService {
@Autowired
private JavaMailSender javaMailSender;
@Async("taskExecutor")
@Override
public void sendEmail(String text) {
try{
// 異步執行
Thread.sleep(1000);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
String msg = "<p style=\"font-weight: bolder;\">尊敬的xxx,您好!</p></n><p style='text-indent: 2em;font-weight: bolder;'>感謝信任xxxxxxxx!</p><p>您的xxxxxxx爲:</p><p style=\"font-size: 13px;\">" + text + "</p></center>";
try {
messageHelper.setSubject("xxxxxxxx");
messageHelper.setFrom("xing_a810@163.com");//發送者的郵箱
messageHelper.setTo("xxxxx@163.com");//發送給誰 能夠是各類郵箱
messageHelper.setText(msg, true);//msg爲發送的信息
javaMailSender.send(messageHelper.getMimeMessage());
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e){
e.printStackTrace();
}
}
}
寫好發現這個郵件發送是很慢的,要等很久web頁面才能收到成功的回調,而後就作成異步的,就弄了個線程池這樣就算是批量發送郵件也不會有那樣的卡頓 注意 加紅的地方就是開啓這個線程池的 還要在你的Application啓動類上面加上開啓異步的註解@EnableAsync
/** * 定義異步任務執行線程池 */ @Configuration public class TaskPoolConfig { @Bean("taskExecutor") public Executor taskExecutor () { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 核心線程數10:線程池建立時候初始化的線程數 executor.setCorePoolSize(10); // 最大線程數20:線程池最大的線程數,只有在緩衝隊列滿了以後纔會申請超過核心線程數的線程 executor.setMaxPoolSize(15); // 緩衝隊列200:用來緩衝執行任務的隊列 executor.setQueueCapacity(200); // 容許線程的空閒時間60秒:當超過了核心線程數以外的線程在空閒時間到達以後會被銷燬 executor.setKeepAliveSeconds(60); // 線程池名的前綴:設置好了以後能夠方便定位處理任務所在的線程池 executor.setThreadNamePrefix("taskExecutor-"); /* 線程池對拒絕任務的處理策略:這裏採用了CallerRunsPolicy策略, 當線程池沒有處理能力的時候,該策略會直接在 execute 方法的調用線程中運行被拒絕的任務; 若是執行程序已關閉,則會丟棄該任務 */ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 設置線程池關閉的時候等待全部任務都完成再繼續銷燬其餘的Bean executor.setWaitForTasksToCompleteOnShutdown(true); // 設置線程池中任務的等待時間,若是超過這個時候尚未銷燬就強制銷燬,以確保應用最後可以被關閉,而不是阻塞住。 executor.setAwaitTerminationSeconds(600); return executor; } }
放兩個參考連接 裏面很詳細,有發送附件的 發送文本的 發送 html 的 等等 我這個只是工做記錄java
發送郵件的:http://www.javashuo.com/article/p-ewuthhjf-ds.htmlweb
異步的:https://www.cnblogs.com/cicada-smile/p/10970208.htmlspring