• Spring Boot发送邮件


    在现代的互联网应用中,发送电子邮件是一项常见的功能需求。Spring Boot提供了简单且强大的邮件发送功能,使得在应用中集成邮件发送变得非常容易。本文将介绍如何在Spring Boot中发送电子邮件,并提供一个完整的示例。

    1. 准备工作

    在开始之前,我们需要确保已经配置好了以下两项准备工作:

    1. 一个有效的邮件服务器及其连接信息,包括SMTP主机名、端口号、用户名和密码。你可以使用自己的邮件服务器或者使用第三方邮件服务提供商(如Gmail、SendGrid等)。
    2. 一个已经搭建好的Spring Boot项目。你可以使用Spring Initializr(https://start.spring.io/)来快速创建一个新的Spring Boot项目,确保项目中包含所需的基本依赖。

    2. 添加依赖

    首先,在你的Spring Boot项目的pom.xml文件中添加以下Maven依赖:

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-mailartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    这将在你的项目中引入Spring Boot的邮件发送功能所需的所有依赖。

    3. 配置邮件服务器信息

    接下来,我们需要在Spring Boot的配置文件中配置邮件服务器的连接信息。在application.properties(或application.yml)文件中添加以下属性:

    spring.mail.host=your_smtp_host
    spring.mail.port=your_smtp_port
    spring.mail.username=your_username
    spring.mail.password=your_password
    spring.mail.properties.mail.smtp.auth=true
    
    • 1
    • 2
    • 3
    • 4
    • 5

    确保将上述属性值替换为你实际的邮件服务器连接信息。

    4. 创建邮件发送服务

    现在,我们可以创建一个邮件发送服务类,该类将使用Spring Boot提供的JavaMailSender来发送邮件。在你的项目中创建一个名为EmailService的新类,并在其中添加以下代码:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Service;
    
    @Service
    public class EmailService {
    
        private JavaMailSender javaMailSender;
    
        @Autowired
        public EmailService(JavaMailSender javaMailSender) {
            this.javaMailSender = javaMailSender;
        }
    
        public void sendEmail(String to, String subject, String text) {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setTo(to);
            message.setSubject(subject);
            message.setText(text);
            javaMailSender.send(message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述代码中,我们使用JavaMailSender来创建一个邮件消息对象SimpleMailMessage,并设置收件人、主题和内容。最后,我们通过调用javaMailSender.send(message)来发送邮件。

    5. 使用邮件发送服务

    现在,我们可以在需要发送邮件的地方使用EmailService。例如,在一个Spring Boot的控制器中,你可以注入EmailService并调用其sendEmail方法来发送邮件。以下是一个示例:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class EmailController {
    
        private EmailService emailService;
    
        @Autowired
        public EmailController(EmailService emailService) {
            this.emailService = emailService;
        }
    
        @GetMapping("/sendEmail")
        public String sendEmail() {
            String to = "recipient@example.com";
            String subject = "Test Email";
            String text = "This is a test email.";
            emailService.sendEmail(to, subject, text);
            return "Email sent successfully.";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述示例中,我们创建了一个EmailController控制器,并注入了EmailService。在sendEmail方法中,我们指定了收件人地址、邮件主题和内容,并调用emailService.sendEmail方法发送邮件。

    6. 运行测试

    现在,你可以启动你的Spring Boot应用程序,并向/sendEmail端点发出GET请求来测试邮件发送功能。如果一切正常,你应该会在日志输出中看到邮件发送成功的消息。

    注意:在测试邮件发送功能时,请确保邮件服务器的连接信息和收件人地址是正确的,以避免错误发送邮件。

    7. 常见错误

    7.1 553 Mail from must equal authorized user

    553 Mail from must equal authorized user  
    com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user  
        at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)  
        at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)  
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)  
        at com.you.mail.model.SendMessage.sendMessage(SendMessage.java:71)  
        at com.you.mail.model.SendMessage.main(SendMessage.java:89)  
        
    Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user  
        at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)  
        at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)  
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)  
        at com.you.mail.model.SendMessage.sendMessage(SendMessage.java:71)  
        at com.you.mail.model.SendMessage.main(SendMessage.java:89)  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    网上看到的结果是增加属性,但我这边测试没通过

    spring:
      boot:
        admin:
          notify:
            mail:
              from: ${spring.mail.username}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    后面增加了个传参解决的,要和username的值一样才行

        public void sendEmail(String to, String subject, String text) {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setTo(to);
            message.setSubject(subject);
            message.setText(text);
            message.setForm("your_username");
            javaMailSender.send(message);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    7.2 SmtpClientAuthentication is disabled for the Tenant.

    SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information.
    
    • 1

    我这边用的是office365的邮箱,这边需要管理员开通相关的第三方客户端发送smtp的权限.

    总结

    本文介绍了如何在Spring Boot中发送电子邮件。我们首先准备了所需的工作,包括配置邮件服务器信息和创建Spring Boot项目。然后,我们添加了所需的Maven依赖项,并创建了一个邮件发送服务类。最后,我们在控制器中使用邮件发送服务来发送邮件,并进行了功能测试。

    Spring Boot使得在应用中集成邮件发送变得非常简单,开发人员只需几行代码就能实现这一功能。希望本文对你理解和使用Spring Boot发送邮件有所帮助!

  • 相关阅读:
    云尚办公-0.3.0
    提升工作效率!如何巧用 Ansible 实现自动化运维?
    索引页结构
    AI写代码:我用kimi生成了一个设备节点监控网站,完美实现功能
    STM32中GPIO工作原理
    【送书活动】网络安全(黑客)自学
    MySQL——表的约束
    基于GA遗传算法的异构网络垂直切换优化算法的matlab仿真
    测试踩坑 - 当已有接口(或数据库表中)新增字段时,都需要注意哪些测试点?
    adb调试Linux嵌入式设备记录
  • 原文地址:https://blog.csdn.net/hitpter/article/details/134043457