zoukankan      html  css  js  c++  java
  • 使用QQ邮箱发送内容-Java Mail -Spring Boot

    假如你想使用qq邮箱发送验证码  看这篇够用

      一.首先我们先登录自己的QQ邮箱获取一个授权码

             什么是授权码?

        如果我们希望使用腾讯、网易的邮箱服务器发送邮件就需要先注册他们的邮箱,但是如果在程序中直接使用邮箱的密码并不安全,所以各邮箱企业推出授权码机制代表密码

        推荐使用腾讯邮箱的授权码(qq号一般都绑定了qq邮箱),因为刚注册的邮箱账户一般不允许直接用程序给其他用户发送邮件

                  1.1登录QQ邮箱

        1.2点击设置

        

        1.3 选择账户选项卡

         

         1.4 开启POP3/SMTP服务

                   

                   1.5 使用密保手机向指定号码发送配置邮件客户端

                   

                   1.6 牢记授权码,否则需要重新获取

           二.使用Java Mail 发送邮件

        2.1 添加依赖

    <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4.6</version>
    </dependency>

        2.2 添加发送邮件的工具类

    @Component
    public class MailUtil {
    
        // 1.设置发送邮件的一些参数
        private static Properties pro = new Properties();
    
        //2.发送人
        private static   String sender;
    
        //3.发送人账号
        private static String username;
    
        //4.发送人密码
        private static String password;
    
    
        //TODO  因为要使用静态成员变量 又要从配置文件中加载参数 使用非静态方法给静态方法赋值
        @Value("${mailbox.sender}")
        public  void setSender(String sender) {
            MailUtil.sender = sender;
        }
        @Value("${mailbox.username}")
        public  void setUsername(String username) {
            MailUtil.username = username;
        }
        @Value("${mailbox.password}")
        public  void setPassword(String password) {
            MailUtil.password = password;
        }
    
        public MailUtil() {
        }
    
        static {
            pro.setProperty("mail.transport.protocol", "smtp");
            pro.setProperty("mail.smtp.host", "smtp.qq.com");
            pro.setProperty("mail.smtp.auth", "true");
            pro.setProperty("mail.smtp.port", "587");
        }
    
        /**
         * @Description: 邮件发送
         * @Param: recipients 收件人
         * @Param: content 发送内容
         * @Param: headline 标题
         * @return: boolean 未成功 成功
         * @Author: @Dog_E
         * @Date: 2020/7/11 0011
         */
        public static boolean sendSimpleMail(String recipients, String content, String headline) {
            boolean res = false;
            try {
                // 2.创建一个会话对象和邮件服务器交互
                Session session = Session.getDefaultInstance(pro);
                // 3.创建一个邮件对象
                MimeMessage message = new MimeMessage(session);
    
                message.setFrom(new InternetAddress(sender)); // 发送人
    
                message.setRecipient(MimeMessage.RecipientType.TO,
                        new InternetAddress(recipients)); // 收件人
    
                message.setSubject(headline);// 设置邮件的标题
                //正文 邮件内容
                message.setContent(content, "text/html;charset=UTF-8");// 设置邮件的正文
    
                message.setSentDate(new Date());// 发送时间
    
                message.saveChanges(); // 保存设置
    
                Transport transport = session.getTransport();// 获取一个传输对象
    
                transport.connect(username, password);// 设置发送邮件用户名和密码
    
                transport.sendMessage(message, message.getAllRecipients());// 发送邮件
    
                transport.close();
                res = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return res;
        }
    }

                    2.3 在 application.yml 添加   password 是刚申请QQ邮箱中的授权码

    #邮件
    mailbox:
      #  发送人
      sender: 664112979@qq.com
      #  发送人的QQ号
      username: 664112979@qq.com
      #  发送人的 授权码
      password: 必填

         2.4 Conntroller

    /**
     * @program: ruoyi
     * @description: 测试邮箱使用
     * @author: @Dog_E
     * @create: 2020-07-11 17:55
     **/
    @RestController
    @RequestMapping("/test")
    public class LoginController {
    
        @PostMapping("/test")
        public String test(String recipients) {
            try {
                /** recipients 收件人 */
                if (MailUtil.sendSimpleMail(recipients, "邮件内容", "标题:验证码")) {
                    return "成功";
                } else {
                    return "失敗";
                }
            } catch (Exception e) {
                e.printStackTrace();
                return "失敗";
            }
        }
        
    }

         2.4 Postman测试

                    

        END--    可以在线上环境  用于自己程序的异常抛出发送异常邮件或者邮件验证码  玩法多样(个人版的应该是有次数的)

  • 相关阅读:
    使用片段嵌入进行文档搜索
    详解支持向量机
    使用NLP检测和对抗AI生成的假新闻
    Detectron2 API 之 config | 十五
    用Python可视化卷积神经网络
    六种用于文本分类的开源预训练模型
    解空间树(回溯算法,分支界限法)
    日记2
    C编程(C语言程序设计,大连理工大学MOOC)
    编程题(C/C++程序设计,同济大学mooc)
  • 原文地址:https://www.cnblogs.com/doge-elder/p/13292002.html
Copyright © 2011-2022 走看看