1、邮箱设置
1.1 启用客户端POP3/SMTP服务
首先我们需要一个邮箱账号,我这里选择的是新浪邮箱,注册并登录,这里比较简单,只需打开设置,找到客户端,然后开启POP3/SMTP服务即可。
2、Spring Email
2.1 导入jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.7.2</version> </dependency>
2.2 邮箱参数设置
导入包之后,我们还需要在程序当中给邮箱做一些参数的配置,我们要想在程序中用这个邮箱,那就需要把邮箱的账号、密码、访问链接以及协议等等都需要配置好。如果之后想换邮箱,只需要改配置文件就好了,切记不要把邮箱在Java程序中写死,下面就来配置一下参数。
spring: # MailProperties 邮箱设置 mail: host: smtp.sina.com # 声明邮箱域名 port: 465 # 邮箱端口 username: xxxxxx@sina.com # 邮箱账号 password: be157646ac7d3754 # 邮箱授权码 protocol: smtps # 协议 # 发送邮件时采用ssl安全连接 properties: mail: smtp: ssl: enable: true
2.3 使用 JavaMailSender 发送邮件
接下来我们就可以写代码来发送邮件了,Spring Email 发送邮件的核心是JavaMailSender ,我们通过调用这个接口来发送邮件。我们这里写一个工具类,然后把发送邮件的整个逻辑流程封装起来,可以反复使用。
@Component public class MailClient { // 声明一个logger,用来记录日志 private static final Logger logger = LoggerFactory.getLogger(MailClient.class); @Autowired private JavaMailSender mailSender; // 发件人 @Value("${spring.mail.username}") private String from; // to:收件人 subject:邮件标题 content:邮件内容 public void sendMail(String to,String subject,String content) { try { MimeMessage message = mailSender.createMimeMessage(); // 构建 MimeMessage 的内容 MimeMessageHelper helper = new MimeMessageHelper(message); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); // true表示支持html文本 mailSender.send(helper.getMimeMessage()); } catch (MessagingException e) { logger.error("发送邮件失败:" + e.getMessage()); } } }
发送一份邮件需要发件人、收件人、邮件标题。邮件内容,而通过服务器发邮件,发件人是固定的,所以我们通过@Value将其注入进来。
2.4 简单测试
配置好之后我们就可以编写一个测试类来测试一下是否能够发送邮件吧
@SpringBootTest public class MailTests { @Autowired private MailClient mailClient; @Test public void testTextMail() { mailClient.sendMail("1973707416@qq.com","测试邮件","Welcome!!!"); } }
3、模板引擎
3.1 使用 Thymeleaf 发送HTML邮件
最后,我们来看一下如何使用Thymeleaf 模板引擎来发送HTML格式邮件,这样就邮件可以包含更加丰富的内容了。
首先,我们编写一个简单的邮件模板demo.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>邮件示例</title> </head> <body> <p>亲爱的, <span style="color:red;" th:text="${username}"></span>!</p> <p>最近怎么样?我希望你的生活有点变化,至少是每当你歇班的时候不要一个人呆在宿舍里睡大觉,应该有一个帅哥哥陪着你逛商场,当你看到一件你想买又一直不舍得买的东西时,刚好他的兜里有足够的钱,逛完商场陪你吃晚饭,然后为你买一大包零食再把你送回宿舍。这种待遇如果恋爱的时候不好好享受一下,结婚后恐怕就很难再找到感觉了。</p> <p>XX,一定要嫁给一个真心实意爱你的男人,嫁给一个品行好的男人,或许他会与你心中的白马王子有一定的差距,但在今后的生活中,你会感觉到,他对你的感情是你无穷无尽的幸福宝藏,有这座宝藏在心中,你会比任何一个女人都幸福。</p> <p>...</p> <p>爱你的男孩</p> </body> </html>
接着同样写一个测试方法
@SpringBootTest public class MailTests { @Autowired private MailClient mailClient; @Autowired private TemplateEngine templateEngine; @Test public void testHtmlMail() { Context context = new Context(); context.setVariable("username","XX"); // 调用templateEngine的process方法生成动态网页 // 并且需要将模板文件的位置以及数据传给他 String content = templateEngine.process("/mail/demo", context); // 这里可以将生成的网页打印在控制台查看一下 System.out.println(content); // 发送邮件 mailClient.sendMail("1973707416@qq.com","写给心爱女孩的一封信",content); } }
控制台输出结果:
邮件发送成功页面
总的来说,发送邮件是一个比较简单的技术。但她不是!!!