Spring Boot 发送电子邮件
最后修改于 2023 年 7 月 28 日
在本文中,我们将展示如何在 Spring Boot 应用程序中发送电子邮件。 我们使用 Mailtrap 服务。
Spring 是一个流行的 Java 应用程序框架,而 Spring Boot 是 Spring 的一个演进,它有助于轻松创建独立的、生产级别的基于 Spring 的应用程序。
Spring Boot 电子邮件示例
在下面的示例中,我们创建一个将电子邮件发送到 Mailtrap 帐户的应用程序。 如果我们没有帐户,我们需要注册一个帐户。 注册过程非常简单快捷。 免费套餐每月可以发送 500 封电子邮件。
注意: Gmail 不适合测试应用程序。我们应该使用 Mailtrap 或 Mailgun 等在线服务,或者使用网络托管公司提供的 SMTP 服务器。
该应用程序具有一个发送电子邮件的 Web 界面。 此外,可以从测试中发送电子邮件。
build.gradle
...
src
├───main
│ ├───java
│ │ └───com
│ │ └───zetcode
│ │ │ Application.java
│ │ ├───controller
│ │ │ MyController.java
│ │ └───service
│ │ EmailService.java
│ └───resources
│ │ application.properties
│ ├───static
│ │ index.html
│ └───templates
│ emailsent.ftlh
└───test
└───java
└───com
└───zetcode
SendEmailApplicationTest.java
这是 Spring Boot 应用程序的项目结构。
plugins {
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.zetcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
implementation 'org.springframework.boot:spring-boot-starter-mail'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
我们在 build.gradle 中有项目依赖项。 对于电子邮件,我们需要声明 spring-boot-starter-mail。
spring.main.banner-mode=off spring.mail.protocol=smtp spring.mail.host=sandbox.smtp.mailtrap.io spring.mail.port=2525 spring.mail.username=-mailtrapusername- spring.mail.password=-mailtrappasswd- spring.mail.properties.mail.smtp.auth = true spring.mail.properties.mail.smtp.starttls.enable = true
我们为 Mailtrap 配置电子邮件设置。 这些详细信息在我们的 Mailtrap 帐户中提供。
package com.zetcode.controller;
import com.zetcode.service.EmailService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
private final EmailService emailService;
public MyController(EmailService emailService) {
this.emailService = emailService;
}
@GetMapping(value = "/sendmail")
public String sendmail() {
emailService.sendMail("kate@example.com", "Test Subject", "Test mail");
return "emailsent";
}
}
控制器包含一个发送电子邮件的映射。
package com.zetcode.service;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class EmailService {
private JavaMailSender javaMailSender;
public EmailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public void sendMail(String toEmail, String subject, String message) {
var mailMessage = new SimpleMailMessage();
mailMessage.setTo(toEmail);
mailMessage.setSubject(subject);
mailMessage.setText(message);
mailMessage.setFrom("johndoe@example.com");
javaMailSender.send(mailMessage);
}
}
电子邮件服务使用 JavaMailSender 和 SimpleMailMessage 发送简单的电子邮件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home page</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<a href="sendmail">Send mail</a>
</body>
</html>
index.html 文件是主页。 它包含一个发送电子邮件的锚点。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Email sent</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>
Email was sent
</p>
</body>
</html>
该模板包含一条简单的消息,该消息在成功发送电子邮件后显示。
package com.zetcode;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Application 是设置 Spring Boot 应用程序的入口点。
package com.zetcode;
import com.zetcode.service.EmailService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SendEmailApplicationTest {
@Autowired
private EmailService emailService;
@Test
public void testEmail() {
emailService.sendMail("frank23@example.com", "Test subject", "Test mail");
}
}
这是发送电子邮件的测试。
$ ./gradlew bootRun
运行应用程序后,我们可以导航到 localhost:8080。
在本文中,我们展示了如何在 Spring Boot 中发送电子邮件。