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

 

posted @ 2020-07-13 10:44  DogElder  阅读(241)  评论(7编辑  收藏  举报