SpringBoot 用了一段时间了,无需复杂的配置真的是用得很爽。在做登录,注册,找回密码模块中必然要用到邮箱,本文介绍 SpringBoot 发送邮件。
这里,博主使用腾讯企业邮箱(master@liuyanzhao.com) 给个人邮箱发送邮件。
目前也测试了 126 邮箱,163 邮箱,qq 邮箱,新浪邮箱。
至少 腾讯企业邮箱,163 邮箱,qq 邮箱测试成功;126 邮箱由于自己 ip 好像被封了一直不成功,新浪邮箱是安全问题,授权失败。
这里补充一下,
使用腾讯企业邮箱(密码是登录密码)
简单邮件
HTML邮件
附件邮件
资源邮件
本文地址:https://liuyanzhao.com/7484.html
这里,博主使用腾讯企业邮箱(master@liuyanzhao.com) 给个人邮箱发送邮件。
目前也测试了 126 邮箱,163 邮箱,qq 邮箱,新浪邮箱。
至少 腾讯企业邮箱,163 邮箱,qq 邮箱测试成功;126 邮箱由于自己 ip 好像被封了一直不成功,新浪邮箱是安全问题,授权失败。
一、Maven
- <!--邮件-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
二、application.properties
- #qq企业邮箱
- #spring.mail.host=smtp.exmail.qq.com
- #spring.mail.username=master@liuyanzhao.com
- #spring.mail.password=登录密码
- #163邮箱
- #spring.mail.host=smtp.163.com
- #spring.mail.username=liuyanzhao_com@163.com
- #spring.mail.password=授权码
- #qq邮箱
- spring.mail.host=smtp.qq.com
- spring.mail.username=847064370@qq.com
- spring.mail.password=授权码
- spring.mail.properties.smtp.auth=true
- spring.mail.properties.smtp.starttls.enable=true
- spring.mail.properties.smtp.starttls.required=true
- spring.mail.properties.mail.smtp.ssl.enable=true
这里补充一下,
邮箱 | host | username | password |
QQ邮箱 | smtp.qq.com | 如 847064370@qq.com | 授权码(不是qq密码和邮箱独立密码) |
126邮箱 | smtp.126.com | 如 example@126.com | 授权码(不是登录密码) |
163邮箱 | smtp.163.com | 如 example@163.com | 授权码(不是登录密码) |
新浪邮箱 | smtp.sina.com | 如 example@sina.com | 登录密码 |
阿里云邮箱 | smtp.aliyun.com | 如 example@aliyun.com | 登录密码 |
三、MailService
- package com.liuyanzhao.chuyun.service;
- import ch.qos.logback.classic.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.core.io.FileSystemResource;
- import org.springframework.mail.SimpleMailMessage;
- import org.springframework.mail.javamail.JavaMailSender;
- import org.springframework.mail.javamail.MimeMessageHelper;
- import org.springframework.stereotype.Service;
- import javax.mail.MessagingException;
- import javax.mail.internet.MimeMessage;
- import java.io.File;
- /**
- * @author 言曌
- * @date 2018/2/6 下午8:25
- */
- @Service
- public class MailService {
- private final Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());
- @Autowired
- private JavaMailSender sender;
- @Value("${spring.mail.username}")
- private String from;
- /**
- * 发送纯文本的简单邮件
- * @param to
- * @param subject
- * @param content
- */
- public void sendSimpleMail(String to, String subject, String content){
- SimpleMailMessage message = new SimpleMailMessage();
- message.setFrom(from);
- message.setTo(to);
- message.setSubject(subject);
- message.setText(content);
- try {
- sender.send(message);
- logger.info("简单邮件已经发送。");
- } catch (Exception e) {
- logger.error("发送简单邮件时发生异常!", e);
- }
- }
- /**
- * 发送html格式的邮件
- * @param to
- * @param subject
- * @param content
- */
- public void sendHtmlMail(String to, String subject, String content){
- MimeMessage message = sender.createMimeMessage();
- try {
- //true表示需要创建一个multipart message
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
- helper.setFrom(from);
- helper.setTo(to);
- helper.setSubject(subject);
- helper.setText(content, true);
- sender.send(message);
- logger.info("html邮件已经发送。");
- } catch (MessagingException e) {
- logger.error("发送html邮件时发生异常!", e);
- }
- }
- /**
- * 发送带附件的邮件
- * @param to
- * @param subject
- * @param content
- * @param filePath
- */
- public void sendAttachmentsMail(String to, String subject, String content, String filePath){
- MimeMessage message = sender.createMimeMessage();
- try {
- //true表示需要创建一个multipart message
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
- helper.setFrom(from);
- helper.setTo(to);
- helper.setSubject(subject);
- helper.setText(content, true);
- FileSystemResource file = new FileSystemResource(new File(filePath));
- String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
- helper.addAttachment(fileName, file);
- sender.send(message);
- logger.info("带附件的邮件已经发送。");
- } catch (MessagingException e) {
- logger.error("发送带附件的邮件时发生异常!", e);
- }
- }
- /**
- * 发送嵌入静态资源(一般是图片)的邮件
- * @param to
- * @param subject
- * @param content 邮件内容,需要包括一个静态资源的id,比如:<img src=\"cid:rscId01\" >
- * @param rscPath 静态资源路径和文件名
- * @param rscId 静态资源id
- */
- public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
- MimeMessage message = sender.createMimeMessage();
- try {
- //true表示需要创建一个multipart message
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
- helper.setFrom(from);
- helper.setTo(to);
- helper.setSubject(subject);
- helper.setText(content, true);
- FileSystemResource res = new FileSystemResource(new File(rscPath));
- helper.addInline(rscId, res);
- sender.send(message);
- logger.info("嵌入静态资源的邮件已经发送。");
- } catch (MessagingException e) {
- logger.error("发送嵌入静态资源的邮件时发生异常!", e);
- }
- }
- }
四、测试类
- package com.liuyanzhao.chuyun.service;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @author 言曌
- * @date 2018/2/6 下午8:28
- */
- @SpringBootTest
- @RunWith(SpringRunner.class)
- public class MailServiceTest{
- @Autowired
- private MailService mailService;
- private String toEmailAddress = "847064370@qq.com";
- @Test
- public void sendSimpleMail() throws Exception {
- mailService.sendSimpleMail(toEmailAddress, "主题:简单邮件", "测试邮件内容");
- }
- @Test
- public void sendHtmlMail() throws Exception {
- Map<String, Object> model = new HashMap<String, Object>();
- model.put("time", new Date());
- model.put("message", "这是测试的内容。。。");
- model.put("toUserName", "刘言曌");
- model.put("fromUserName", "言曌博客管理员");
- String content = "<h1>Hello,言曌!</h1>";
- mailService.sendHtmlMail(toEmailAddress, "主题:html邮件", content);
- }
- @Test
- public void sendAttachmentsMail() throws Exception {
- mailService.sendAttachmentsMail(toEmailAddress, "主题:带附件的邮件", "有附件,请查收!", "/Users/liuyanzhao/Documents/刘言曌.xlsx");
- }
- @Test
- public void sendInlineResourceMail() throws Exception {
- String rscId = "rscId001";
- mailService.sendInlineResourceMail(toEmailAddress,
- "主题:嵌入静态资源的邮件",
- "<html><body>这是有嵌入静态资源:<img src='cid:" + rscId + "\' width='128px' height='128px' ></body></html>",
- "/Users/liuyanzhao/Pictures/avatar.jpg",
- rscId);
- }
- }
五、效果图
使用腾讯企业邮箱(密码是登录密码)
简单邮件
HTML邮件
附件邮件
资源邮件
本文地址:https://liuyanzhao.com/7484.html
2018年09月03日 22:22:46
看了5、6篇博客,到博主这才解决了问题,赞!