随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、引入依赖

  邮件发送需要引入spring-boot-starter-mail

<!--邮件相关依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

二、自动配置

  自动配置类:MailSenderAutoConfiguration

  

 

   

 

   自动配置类注册了一个 JavaMailSenderImpl 组件,这个组件就是用来发送邮件的。

   我们可以在 MailProperties 类中配置邮件相关信息。

 

三、测试

  邮件发送流程:

  

 

  1、配置邮箱信息

复制代码
spring.mail.username=jifei_niu@126.com
spring.mail.password=邮箱授权码,非登录密码
spring.mail.host=smtp.126.com

#开启 smtp 的 ssl 连接
spring.mail.properties.mail.smtp.ssl.enable=true
复制代码

 

  2、发送普通邮件

复制代码
    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    public void test() {
        SimpleMailMessage message = new SimpleMailMessage();

        //邮件设置
        message.setSubject("通知-今晚开会");
        message.setText("今晚7:30开会");

        message.setTo("18331878896@163.com");
        message.setFrom("jifei_niu@126.com");

        mailSender.send(message);
    }
复制代码

 

  3、发送附件邮件

复制代码
    @Autowired
    JavaMailSenderImpl mailSender;

        @Test
    public void test02() throws MessagingException {
        //1、创建一个复杂的消息邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

        //邮件设置
        helper.setSubject("通知-今晚开会");
        helper.setText("<b style='color:red'>今晚7:30开会</b>", true);

        helper.setTo("18331878896@163.com");
        helper.setFrom("jifei_niu@126.com");

        //上传文件
        helper.addAttachment("1.jpg", new File("E:\\photo\\scenerys\\862114.jpg"));
        helper.addAttachment("2.jpg", new File("E:\\photo\\scenerys\\10254385.jpg"));


        mailSender.send(mimeMessage);
    }
复制代码

 

 

四、常见错误

  1、Java  使用QQ邮箱发送邮件报错 530 Error: A secure connection is requiered(such as ssl)

    在Java中使用HtmlEmailQQ邮箱发送邮件时报错:

Authentication failed; nested exception is javax.mail.AuthenticationFailedException:
 530 Error: A secure connection is requiered(such as ssl);

  解决办法:
  (1)确认用来发送邮件的QQ邮箱是否开通POP3/SMPT功能;
  说明:
    由于腾讯对于QQ邮箱的使用客户端登陆的用户(所有非腾讯页面或者腾讯客户端)都需要使用授权码登陆。授权码:在你开通POP3/SMPT功能时获得。
  (2)QQ邮箱需要使用SSL,端口号为465或者587 我们在需要在配置文件中做如下设置:

1
2
#开启 smtp 服务的 ssl 连接
spring.mail.properties.mail.smtp.ssl.enable=true

  

  2、Authentication failed; nested exception is javax.mail.AuthenticationFailedException 的解决办法

  Springboot做项目部署发送邮件时,出现org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 问题

  原因是:我的POP3/SMTP服务是开启的,但在password处填写了邮箱的登录密码

  一定要把邮箱密码改为授权码后,错误解决。

  关于授权码的解释如下:具体可看:http://help.sina.com.cn/comquestiondetail/view/1566/

客户端授权码适用于任何通过IMAP/POP3/SMTP协议登录邮箱的客户端。用于替换在客户端设置中的“登录密码”。新浪邮箱官方手机客户端app,仍然使用邮箱登录密码登录。
使用说明:
1、开启pop,imap需要先开启授权码
2、开启/重置授权码的时候需要手机验证,手机下行3次后需上行验证。若邮箱已绑定手机,则需要使用绑定手机下发短信验证,未绑定手机需要输入新验证手机号进行验证。
3、手机验证之后获得授权码,授权码是16位字母+数字的组合,请保存此授权码以进行客户端设置。在弹出窗中可勾选开启pop,imap,smtp服务。
4、 授权码开启后,pop,imap,smtp验证都使用授权码进行验证。在客户端不可再使用登录密码进行验证。已登录的客户端需要重新输入授权码验证。
5、 授权码都是加密存储,所以不能查看,只能重置。重置授权码也需要先进行手机验证。
6、 授权码关闭,会同时关闭pop,imap,smtp服务。
特别提示:
1、 未开启授权码的用户,仍然保持原来的使用登录密码验证。开启后已设置账号的客户端会验证失败,需要在验证框中输入授权码进行验证。2、 开启授权码后,旧版手机客户端(包括ios和安卓)将无法使用,需要用户升级到最新版本。

  总结:
  1)检查自己的邮箱是否开启pop3/smtp服务。
  2)程序中所填的邮箱密码是否为开启pop3/smtp服务时所给的授权码。
  3)授权码开启后,pop,imap,smtp验证都使用授权码进行验证。在客户端不可再使用登录密码进行验证。已登录的客户端需要重新输入授权码验证。

 

 
posted on   格物致知_Tony  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
历史上的今天:
2021-01-04 第三节:工厂方法模式
点击右上角即可分享
微信分享提示

目录导航