最近在做邮件发送的服务,正常来说 SpringBoot 整合mail还是很方便的,然而来了新的需求:A请求使用邮箱C发送,B请求使用邮箱D发送,也就是说我们需要配置两套发送服务。
首先我们来看下单个服务的配置:
spring.mail.host=smtp.mxhichina.com spring.mail.username=admin@52itstyle.com spring.mail.password=123456 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true
其他的不用管,我们只需要在用到的时候注入以下即可:
@Autowired private JavaMailSender mailSender;//执行者
如果大家对如何加载配置以及初始化感兴趣,可以了解下 spring-boot-autoconfigure 的原理。
由于 mail 并没有像数据库那样提供多数据源,这里只能我们自己手动获取了:
/** * 创建发送器 */ public class MailUtil { public static JavaMailSenderImpl createMailSender(){ JavaMailSenderImpl sender = new JavaMailSenderImpl(); sender.setHost("smtp.mxhichina.com"); sender.setPort(25); sender.setUsername("admin@52itstyle.com"); sender.setPassword("123456"); sender.setDefaultEncoding("Utf-8"); Properties p = new Properties(); p.setProperty("mail.smtp.timeout",1000+""); p.setProperty("mail.smtp.auth","true"); sender.setJavaMailProperties(p); return sender; } }
这里,顺便说一个小功能,在发送邮件的时候,如何自定义显示发件人名称:
MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom("345849402@qq.com","爪哇笔记");
最后我们在使用的时候,只需要根据不同的请求使用不同的 sender 就可以了。