SpringBoot整合邮箱
一.准备工作
1.1.开通邮箱SMTP服务
这里以邮箱为例,我们登录邮箱依次点击设置-常规-第三方服务-开启服务-生成授权码来开通邮箱SMTP服务。
1.2.依赖导入
<!-- email依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
讯享网
1.3.配置application.properties文件
讯享网#发送者的邮箱,其他参数的注释详情见MailConfig.java文件 admin.email=********@.com universe.mail.username=********@.com universe.mail.password=******** universe.mail.host=smtp..com universe.mail.port=465 universe.mail.properties.mail.smtp.auth=true universe.mail.properties.mail.smtp.socketFactory.port=465 universe.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory universe.mail.properties.mail.smtp.socketFactory.fallback=false universe.mail.properties.mail.smtp.starttls.enable=true universe.mail.properties.mail.smtp.starttls.required=true
1.4.创建MailConfig.java
package com.temperature.humidity.system.config.email; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @Component @Data public class MailConfig {
/ * SMTP服务器的登录用户。 */ @Value("${universe.mail.username}") private String username; / * SMTP服务器的登录密码。 */ @Value("${universe.mail.password}") private String password; / * SMTP服务器主机。例如,smtp.example.com. */ @Value("${universe.mail.host}") private String host; / * SMTP服务器端口。 */ @Value("${universe.mail.port}") private Integer port; / * 如果为真,则尝试使用AUTH命令对用户进行身份验证。默认值为false。 */ @Value("${universe.mail.properties.mail.smtp.auth}") private String smtpAuth; / * 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456 */ @Value("${universe.mail.properties.mail.smtp.socketFactory.port}") private String socketFactoryPort; / * 指定实现javax.net.SocketFactory接口的类的名称, * 这个类将被用于创建SMTP的套接字 */ @Value("${universe.mail.properties.mail.smtp.socketFactory.class}") private String socketFactoryClass; / * 如果设置为true,未能创建一个套接字使用指定的套接字 * 工厂类将导致使用java.net.Socket创建的套接字类, * 默认值为true */ @Value("${universe.mail.properties.mail.smtp.socketFactory.fallback}") private String socketFactoryFallback; / * 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 */ @Value("${universe.mail.properties.mail.smtp.starttls.enable}") private String starttlsEnable; / * 如果为真,则需要使用STARTTLS命令。如果服务器不支持STARTTLS命 * 令,或者该命令失败,则connect方法将失败。默认值为false。 */ @Value("${universe.mail.properties.mail.smtp.starttls.required}") private String starttlsRequired; / * SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议), * 它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转 * 方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于 * 避免用户受到垃圾邮件的侵扰。 */ private String protocol = "smtp"; / * 编码格式 默认为UTF-8。 */ private Charset defaultEncoding; / * 会话JNDI名称。设置时,优先于其他会话设置。 */ private String jndiName; private static final Charset DEFAULT_CHARSET; public MailConfig() {
this.defaultEncoding = DEFAULT_CHARSET; } static {
DEFAULT_CHARSET = StandardCharsets.UTF_8; } }
1.5.创建OurMail.java
讯享网package com.temperature.humidity.system.config.email; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.mail.javamail.JavaMailSenderImpl; import java.util.HashMap; import java.util.Map; import java.util.Properties; @Configuration public class OurMail {
@Autowired private MailConfig mailConfig; @Bean JavaMailSenderImpl mailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl(); this.applyProperties(mailConfig, sender); return sender; } private void applyProperties(MailConfig mailConfig, JavaMailSenderImpl sender) {
sender.setHost(mailConfig.getHost()); if (mailConfig.getPort() != null) {
sender.setPort(mailConfig.getPort()); } sender.setUsername(mailConfig.getUsername()); sender.setPassword(mailConfig.getPassword()); sender.setProtocol(mailConfig.getProtocol()); if (mailConfig.getDefaultEncoding() != null) {
sender.setDefaultEncoding(mailConfig.getDefaultEncoding().name()); } sender.setJavaMailProperties(this.asProperties()); } private Properties asProperties() {
Properties properties = new Properties(); Map<String, String> source = new HashMap<>(); source.put("mail.smtp.auth", mailConfig.getSmtpAuth()); source.put("mail.smtp.socketFactory.port", mailConfig.getSocketFactoryPort()); source.put("mail.smtp.socketFactory.class", mailConfig.getSocketFactoryClass()); source.put("mail.smtp.socketFactory.fallback", mailConfig.getSocketFactoryFallback()); source.put("mail.smtp.starttls.enable", mailConfig.getStarttlsEnable()); source.put("mail.smtp.starttls.required", mailConfig.getStarttlsRequired()); properties.putAll(source); return properties; } }
1.6.创建OurMailUtil.java
package com.temperature.humidity.system.common.utils; import com.temperature.humidity.system.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.util.List; / * 邮箱工具类 */ @Component public class OurMailUtil {
@Autowired private JavaMailSender mailSender; @Value("${admin.email}") private String adminEmail; / * 群发 */ public void sendMail(String subject, String text, List<User> users) throws MessagingException {
String[] userEmail = new String[users.size()]; for (int i = 0; i < users.size(); i++) {
User user = users.get(i); userEmail[i] = user.getEmail(); } sendMailPublic(subject, text, userEmail); } / * 发给一个人 */ public void sendMailForOnePeople(String userEmail, String subject, String text) throws MessagingException {
sendMailPublic(subject, text, userEmail); } private <T> void sendMailPublic(String subject, String text, T userEmail) throws MessagingException {
//一个复杂的邮箱 MimeMessage mimeMessage = mailSender.createMimeMessage(); //组装 MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage); //即为邮件发送者,一般设置在配置文件中 mimeMessageHelper.setFrom(adminEmail); if (userEmail instanceof String[]) {
String[] userEmailArray = (String[]) userEmail; mimeMessageHelper.setTo(userEmailArray); } if (userEmail instanceof String) {
String userEmailString = (String) userEmail; mimeMessageHelper.setTo((userEmailString)); } //邮件主题 mimeMessageHelper.setSubject(subject); //邮件内容 mimeMessageHelper.setText(text, true); mailSender.send(mimeMessage); } }
二.测试
2.1.创建EmailTestController.java
讯享网package com.temperature.humidity.system.controller; import com.temperature.humidity.system.common.utils.OurMailUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.mail.MessagingException; @RestController @RequestMapping("/email") public class EmailTestController {
@Autowired private OurMailUtil ourMailUtil; @RequestMapping("/sent") public String sentEmail() {
try {
//要发送人的邮箱 String toEmail = "@.com"; //邮箱主题 String subject = "邮箱测试-html"; //邮箱内容 String text = "<p style='color:red'>我是红色</p>"; ourMailUtil.sendMailForOnePeople(toEmail, subject, text); return "发送成功"; } catch (MessagingException e) {
return "发送失败!"; } } }
2.2.测试接口
我们的服务启动成功之后,打开postman输入http://127.0.0.1:8080/email/sent访问我们的邮箱-html发送测试接口,我们可以看到服务器返回了发送成功的消息。


我们登录被发送人邮箱可以看到这条消息,则证明测试成功。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18386.html