原文: http://zetcode.com/springboot/email/

Spring Boot 发送电子邮件教程展示了如何在 Spring Boot 应用中发送电子邮件。 我们使用 Mailtrap 服务。

Spring 是流行的 Java 应用框架,而 Spring Boot 是 Spring 的演进,可以帮助轻松地创建独立的,生产级的基于 Spring 的应用。

Spring Boot 电子邮件示例

在下面的示例中,我们创建一个将电子邮件发送到 Mailtrap 帐户的应用。 如果没有帐户,我们需要注册一个帐户。 注册过程非常简单快捷。 有一个免费层,每月可发送 500 封电子邮件。

注意:Gmail 不是测试应用的理想选择。 我们应该使用诸如 Mailtrap 或 Mailgun 之类的在线服务,或者使用由网络托管公司提供的 SMTP 服务器。

该应用具有 Web 界面来发送电子邮件。 此外,可以通过测试发送电子邮件。

  1. pom.xml
  2. src
  3. ├───main
  4. ├───java
  5. └───com
  6. └───zetcode
  7. Application.java
  8. ├───controller
  9. MyController.java
  10. └───service
  11. EmailService.java
  12. └───resources
  13. application.properties
  14. ├───static
  15. index.html
  16. └───templates
  17. emailsent.ftl
  18. └───test
  19. └───java
  20. └───com
  21. └───zetcode
  22. SendEmailApplicationTest.java

这是 Spring Boot 应用的项目结构。

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>com.zetcode</groupId>
  8. <artifactId>springbootemailex</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <packaging>jar</packaging>
  11. <properties>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <maven.compiler.source>11</maven.compiler.source>
  14. <maven.compiler.target>11</maven.compiler.target>
  15. </properties>
  16. <parent>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-parent</artifactId>
  19. <version>2.1.1.RELEASE</version>
  20. </parent>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-freemarker</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-mail</artifactId>
  37. </dependency>
  38. </dependencies>
  39. <build>
  40. <plugins>
  41. <plugin>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-maven-plugin</artifactId>
  44. </plugin>
  45. </plugins>
  46. </build>
  47. </project>

我们在pom.xml中具有项目依赖项。 对于电子邮件,我们需要声明spring-boot-starter-mail

resources/application.properties

  1. spring.main.banner-mode=off
  2. spring.mail.protocol=smtp
  3. spring.mail.host=smtp.mailtrap.io
  4. spring.mail.port=2525
  5. spring.mail.username=0128491df14b6d
  6. spring.mail.password=7b6d7ha59a1f08
  7. spring.mail.properties.mail.smtp.auth = true
  8. spring.mail.properties.mail.smtp.starttls.enable = true

我们为 Mailtrap 配置电子邮件设置。 这些详细信息在我们的 Mailtrap 帐户中提供。

com/zetcode/MyController.java

  1. package com.zetcode.controller;
  2. import com.zetcode.service.EmailService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. @Controller
  7. public class MyController {
  8. @Autowired
  9. private EmailService emailService;
  10. @GetMapping(value = "/sendmail")
  11. public String sendmail() {
  12. emailService.sendMail("kate@example.com", "Test Subject", "Test mail");
  13. return "emailsent";
  14. }
  15. }

控制器包含一个发送电子邮件的映射。

com/zetcode/service/EmailService.java

  1. package com.zetcode.service;
  2. import org.springframework.mail.SimpleMailMessage;
  3. import org.springframework.mail.javamail.JavaMailSender;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class EmailService {
  7. private JavaMailSender javaMailSender;
  8. public EmailService(JavaMailSender javaMailSender) {
  9. this.javaMailSender = javaMailSender;
  10. }
  11. public void sendMail(String toEmail, String subject, String message) {
  12. var mailMessage = new SimpleMailMessage();
  13. mailMessage.setTo(toEmail);
  14. mailMessage.setSubject(subject);
  15. mailMessage.setText(message);
  16. mailMessage.setFrom("johndoe@example.com");
  17. javaMailSender.send(mailMessage);
  18. }
  19. }

电子邮件服务使用JavaMailSenderSimpleMailMessage发送简单的电子邮件。

resources/static/index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Home page</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. </head>
  8. <body>
  9. <a href="sendmail">Send mail</a>
  10. </body>
  11. </html>

index.html文件是主页。 它包含一个用于发送电子邮件的锚。

resources/templates/emailsent.ftl

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Email sent</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. </head>
  8. <body>
  9. <p>
  10. Email was sent
  11. </p>
  12. </body>
  13. </html>

该模板包含一条简单的消息,该消息在成功发送电子邮件后显示。

com/zetcode/Application.java

  1. package com.zetcode;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class Application {
  6. public static void main(String[] args) {
  7. SpringApplication.run(Application.class, args);
  8. }
  9. }

Application是设置 Spring Boot 应用的入口。

com/zetcode/SendEmailApplicationTest.java

  1. package com.zetcode;
  2. import com.zetcode.service.EmailService;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. @RunWith(SpringRunner.class)
  9. @SpringBootTest
  10. public class SendEmailApplicationTest {
  11. @Autowired
  12. private EmailService emailService;
  13. @Test
  14. public void testEmail() {
  15. emailService.sendMail("frank23@example.com", "Test subject", "Test mail");
  16. }
  17. }

这是发送电子邮件的测试。

  1. $ mvn spring-boot:run

应用运行后,我们可以导航到localhost:8080

在本教程中,我们展示了如何在 Spring Boot 中发送电子邮件。 您可能也对相关教程感兴趣: Spring Boot Freemaker 教程Java 教程或列出所有 Spring Boot 教程