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