zoukankan      html  css  js  c++  java
  • 第十二章:(3)Spring Boot 与 任务 之 邮件任务

    一、引入依赖

      邮件发送需要引入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 我们在需要在配置文件中做如下设置:

    #开启 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验证都使用授权码进行验证。在客户端不可再使用登录密码进行验证。已登录的客户端需要重新输入授权码验证。

     
  • 相关阅读:
    Exp8-Web综合
    Exp7-网络欺诈防范
    Exp6-MSF应用基础
    加密API学习
    Exp5 信息搜集与漏洞扫描
    Exp4-恶意代码分析
    Exp3-免杀原理
    Exp2-后门原理与实践
    leetcode 22括号生成 暴力法
    413 等差数列划分
  • 原文地址:https://www.cnblogs.com/niujifei/p/15763743.html
Copyright © 2011-2022 走看看