发送邮件用到了Spring Email的技术
来先简单介绍一下该技术
首先进行配置文件,配置文件的目的是告诉Spring需要用哪个邮箱来发送邮件
spring:
mail:
host: smtp.qq.com
port: 465
username: ***@qq.com
password: ***
protocol: smtps
properties:
mail.smtp.auth: true
mail.smtp.starttls.enable: true
mail.smtp.starttls.required: true
mail.smtp.socketFactory.port: 465
mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback: false
首先是JavaMailSender提供了一个发送邮件send的方法
send方法的参数需要一个MimeMessage进行封装,封装的参数是邮件的发送方,邮件的接受方,邮件的主题,邮件的内容
而MimeMessage不方便进行封装所以Spring又提供了一个类MimeMessageHelper进行封装
MimeMessage通过JavaMailSender的createMimeMessage方法得到
MimeMessageHelper通过MimeMessageHelper的有参构造得到参数就是MimeMessage
再将MimeMessage通过MimeMessageHelper的getMimeMessage方法得到
最后将MimeMessage作为参数传递给send
@Component
public class MailClient {
private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
public void sendMail(String to, String subject, String content) {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
helper.setFrom(from);
helper.setTo(to);
helper.setText(content,true);//表示可以发送HTML文件
helper.setSubject(subject);
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:" + e.getMessage());
}
}
}
如果想要发送HTML文件的话 只需要将helper.setText(content,true)方法参数设置为true即可
如果想要返回一个动态渲染后的HTML的话thymeleaf提供了一个模板引擎templateEngine
Context context = new Context();
context.setVariable("username","test");
String process = templateEngine.process("/mail/demo", context);
我们只需要new一个Context对象然后将需要动态生成的参数以key:value的形式通过setVariable方法传参即可
最后指定你要发送的HTML路径templateEngine的process方法会自动帮你完成任务的