发送邮件
步骤:
在163邮箱打开 SMTP 服务。
引入 spring-boot-starter-mail
依赖。
在配置文件配置主机、端口、发送邮箱、授权码等。
创建 MailClient 类,调用 JavaMailSender 发送邮件。
使用 thymeleaf 发送 HTML 邮件,调用 TemplateEngine 把信息封装到 HTML 模板。
【问题】发送邮件成功但没接收到,在垃圾箱中可找到。
发送邮件的功能实现
发送邮件的功能是为注册功能做准备的,发送邮件用到了Spring Email的技术
来先简单介绍一下该技术
首先进行配置文件,配置文件的目的是告诉Spring需要用哪个邮箱来发送邮件
spring:mail:host: smtp.qq.comport: 465username: ***@qq.compassword: ***protocol: smtpsproperties:mail.smtp.auth: truemail.smtp.starttls.enable: truemail.smtp.starttls.required: truemail.smtp.socketFactory.port: 465mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactorymail.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);@Autowiredprivate 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方法会自动帮你完成任务