Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
Spring 对 Java Mail 有很好的支持。因此,Spring Boot 也提供了自动配置的支持。
Spring Boot 集成 Java Mail
Spring Boot 中使用 Java Mail 非常简单方便。修改 pom 文件,添加依赖。
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
在 src/main/resources/application.properties 中配置邮件信息
- spring.mail.host=smtp.163.com
- spring.mail.username=请输入用户名
- spring.mail.password=请输入密码
- spring.mail.port=25
- spring.mail.protocol=smtp
- spring.mail.default-encoding=UTF-8
单元测试
我们通过编写单元测试用例,测试 Java Mail 是否正常工作。值得注意的是,邮件包括几种类型:简单文本的邮件、 HTML 文本的邮件、 内嵌图片的邮件、 包含附件的邮件。
- @RunWith(SpringJUnit4ClassRunner.class)
- @SpringApplicationConfiguration(WebMain.class)
- public class SpringMailTest {
- @Autowired
- private JavaMailSenderImpl mailSender;
- /**
- * 发送包含简单文本的邮件
- */
- @Test
- public void sendTxtMail() {
- SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
- // 设置收件人,寄件人
- simpleMailMessage.setTo(new String[] {"lianggzone@163.com"});
- simpleMailMessage.setFrom("lianglevel@163.com");
- simpleMailMessage.setSubject("Spring Boot Mail 邮件测试【文本】");
- simpleMailMessage.setText("这里是一段简单文本。");
- // 发送邮件
- mailSender.send(simpleMailMessage);
- System.out.println("邮件已发送");
- }
- /**
- * 发送包含HTML文本的邮件
- * @throws Exception
- */
- @Test
- public void sendHtmlMail() throws Exception {
- MimeMessage mimeMessage = mailSender.createMimeMessage();
- MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
- mimeMessageHelper.setTo("lianggzone@163.com");
- mimeMessageHelper.setFrom("lianglevel@163.com");
- mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【HTML】");
- StringBuilder sb = new StringBuilder();
- sb.append("<html><head></head>");
- sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p></body>");
- sb.append("</html>");
- // 启用html
- mimeMessageHelper.setText(sb.toString(), true);
- // 发送邮件
- mailSender.send(mimeMessage);
- System.out.println("邮件已发送");
- }
- /**
- * 发送包含内嵌图片的邮件
- * @throws Exception
- */
- @Test
- public void sendAttachedImageMail() throws Exception {
- MimeMessage mimeMessage = mailSender.createMimeMessage();
- // multipart模式
- MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
- mimeMessageHelper.setTo("lianggzone@163.com");
- mimeMessageHelper.setFrom("lianglevel@163.com");
- mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【图片】");
- StringBuilder sb = new StringBuilder();
- sb.append("<html><head></head>");
- sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p>");
- // cid为固定写法,imageId指定一个标识
- sb.append("<img src=\"cid:imageId\"/></body>");
- sb.append("</html>");
- // 启用html
- mimeMessageHelper.setText(sb.toString(), true);
- // 设置imageId
- FileSystemResource img = new FileSystemResource(new File("D:/images/01.jpg"));
- mimeMessageHelper.addInline("imageId", img);
- // 发送邮件
- mailSender.send(mimeMessage);
- System.out.println("邮件已发送");
- }
- /**
- * 发送包含附件的邮件
- * @throws Exception
- */
- @Test
- public void sendAttendedFileMail() throws Exception {
- MimeMessage mimeMessage = mailSender.createMimeMessage();
- // multipart模式
- MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
- mimeMessageHelper.setTo("lianggzone@163.com");
- mimeMessageHelper.setFrom("lianglevel@163.com");
- mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【附件】");
- StringBuilder sb = new StringBuilder();
- sb.append("<html><head></head>");
- sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p></body>");
- sb.append("</html>");
- // 启用html
- mimeMessageHelper.setText(sb.toString(), true);
- // 设置附件
- FileSystemResource img = new FileSystemResource(new File("D:/images/01.jpg"));
- mimeMessageHelper.addAttachment("image.jpg", img);
- // 发送邮件
- mailSender.send(mimeMessage);
- System.out.println("邮件已发送");
- }
- }
源代码
相关示例完整代码: springboot-action
(完)

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期