SpringBoot使用qq邮箱发送邮件

  最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下。

  

一、引用Maven依赖 这里使用spring自带的邮件jar包

       <!-- 邮件服务 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

二、yml配置

#邮箱配置spring:
  mail:
    host: smtp.exmail.qq.com
    port: 465
    protocol: smtp
    username: ********  //你的邮箱账号
    password: ********  //你的登陆密码
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

三、创建EmailImpl类作为email组件

@Component
public class EmailImpl {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource
    private RedisUtil redisUtil;

    @Value("${spring.mail.username}")
    public String from;
    @Value("${spring.mail.password}")
    public String password;// 登录密码
    @Value("${spring.mail.protocol}")
    public String protocol;// 协议
    @Value("${spring.mail.port}")
    public String port;// 端口
    @Value("${spring.mail.host}")
    public String host;// 服务器地址

    private String theme = "注册验证码";

    private String reset = "重置验证码";

    //初始化参数
    public Session initProperties() {
        Properties properties = new Properties();
        properties.setProperty("mail.transport.protocol", protocol);
        properties.setProperty("mail.smtp.host", host);
        properties.setProperty("mail.smtp.port", port);
        // 使用smtp身份验证
        properties.put("mail.smtp.auth", "true");
        // 使用SSL,企业邮箱必需 start
        // 开启安全协议
        MailSSLSocketFactory mailSSLSocketFactory = null;
        try {
            mailSSLSocketFactory = new MailSSLSocketFactory();
            mailSSLSocketFactory.setTrustAllHosts(true);
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        properties.put("mail.smtp.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory);
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", "false");
        properties.put("mail.smtp.socketFactory.port", port);
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, password);
            }
        });
        // 使用SSL,企业邮箱必需 end
        // TODO 显示debug信息 正式环境注释掉
        session.setDebug(true);
        return session;
    }

    /**
     * 发送注册邮箱验证码
     * @param sender
     * @return
     */
    public Boolean sendHtmlEmail(String sender) {
        boolean lean = false;
        try {
            Session session = initProperties();
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(from,"Tesra"));// 发件人,可以设置发件人的别名
            // 收件人,多人接收
            InternetAddress[] internetAddressTo = new InternetAddress().parse(sender);
            mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
            // 主题
            mimeMessage.setSubject(theme);
            // 时间
            mimeMessage.setSentDate(new Date());
            // 容器类 附件
            MimeMultipart mimeMultipart = new MimeMultipart();
            // 可以包装文本,图片,附件
            MimeBodyPart bodyPart = new MimeBodyPart();
            String code = CodeUtils.getMathVal();
            // 设置内容 getEmailHtml是邮箱内容模板
            bodyPart.setContent(getEmailHtml(sender,code), "text/html; charset=UTF-8");
            mimeMultipart.addBodyPart(bodyPart);
            // 添加图片&附件
//            bodyPart = new MimeBodyPart();
//            bodyPart.attachFile(fileSrc);
//            mimeMultipart.addBodyPart(bodyPart);
            mimeMessage.setContent(mimeMultipart);
            mimeMessage.saveChanges();
            Transport.send(mimeMessage);
            redisUtil.set(sender,code, UserConstant.time);
            lean = true;
        } catch (MessagingException e) {
            e.printStackTrace();
            lean = false;
            logger.error("发送注册邮件失败:"+sender+" ----"+e.getMessage());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            lean = false;
            logger.error("发送注册邮件失败:"+sender+" ----"+e.getMessage());
        }
        return lean;
    }

    /**
     * 发送重置邮箱验证码
     * @param sender
     * @return
     */
    public Boolean sendHtmlEmailCZ(String sender) {
        Boolean lean = false;
        try {
            Session session = initProperties();
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(from,"Tesra"));// 发件人,可以设置发件人的别名
            // 收件人,多人接收
            InternetAddress[] internetAddressTo = new InternetAddress().parse(sender);
            mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
            // 主题
            mimeMessage.setSubject(reset);
            // 时间
            mimeMessage.setSentDate(new Date());
            // 容器类 附件
            MimeMultipart mimeMultipart = new MimeMultipart();
            // 可以包装文本,图片,附件
            MimeBodyPart bodyPart = new MimeBodyPart();
            String code = CodeUtils.getMathVal();
            // 设置内容 getEmailReset是发送邮箱的html模板
            bodyPart.setContent(getEmailReset(sender,code), "text/html; charset=UTF-8");
            mimeMultipart.addBodyPart(bodyPart);
            // 添加图片&附件
//            bodyPart = new MimeBodyPart();
//            bodyPart.attachFile(fileSrc);
//            mimeMultipart.addBodyPart(bodyPart);
            mimeMessage.setContent(mimeMultipart);
            mimeMessage.saveChanges();
            Transport.send(mimeMessage);
            redisUtil.set(sender,code, UserConstant.time);
            lean = true;
        } catch (MessagingException e) {
            e.printStackTrace();
            lean = false;
            logger.error("发送重置邮件失败:"+sender+" ----"+e.getMessage());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            lean = false;
            logger.error("发送重置邮件失败:"+sender+" ----"+e.getMessage());
        }
        return lean;
    }
}

四、邮箱html模板

/**
     * 注册邮箱模板
     * @param to 邮箱号
     * @param code 验证码
     * @return
     */
    public String getEmailHtml(String to,String code){
        String[] tos = to.split("@");
        String sub = tos[0].substring(0,2);
        String email = sub+"*******@"+tos[1];
        String html = "<div style=\"padding: 0px 0px 0px 20px;box-sizing: border-box;color: #333333;font-family: \"microsoft yahei\";font-size: 14px\">" +
               "<h3 style=\"font-weight: normal;font-size: 18px;\">Test测试</h3>" +
               "<h4 style=\"color:#2672EC;font-size: 40px;margin-top: 24px;font-weight: normal;\">账号注册验证码</h4>" +
               "<div style=\"margin-top: 40px;\">您好,您正在使用<a href=\"javascript:;\" target=\"_blank\" style=\"color: #2672EC;text-decoration: none;\">"+email+"</a>注册账号。</div>" +
               "<div style=\"margin-top: 30px;\">您的注册验证码为:<em style=\"font-style: normal;font-weight: 600;\">"+code+"</em></div>" +
               "<div style=\"margin-top: 35px;\">谢谢!</div>" +
               "<div style=\"margin-top: 10px;\">Test测试</div>" +
               "</div>";
        return html;
    }

五、方法调用

    @Autowired
    private EmailImpl emailImpl;

    //email邮箱号
    emailImpl.sendHtmlEmail(email);

至此就完成了SpringBoot使用qq邮箱发送邮件。

  

  

原文地址:https://www.cnblogs.com/tangyin/p/9875899.html

时间: 2024-10-02 09:09:54

SpringBoot使用qq邮箱发送邮件的相关文章

基于java mail实现简单的QQ邮箱发送邮件

刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 完成验证 获取授权码(后面代码实现时使用) -----------------------------第二步 环境配置 即下载第三方库 https://github.com/javaee/javamail/releases -----------------------------第三步 代

杂项之使用qq邮箱发送邮件

杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏效了...于是上网查了查,QQ对这方面做了一些限制,必须使用授权码才能登陆邮箱.官方链接在这:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256按照上面的官方文档配置好之后就可以使用QQ邮箱发

qq邮箱发送邮件封装

使用qq发送邮件 # coding=utf8 """ qq邮箱发送邮件 """ import sys reload(sys) sys.setdefaultencoding('utf8') import smtplib from email.mime.text import MIMEText class QQMailClient(): """使用qq邮箱发送邮件""" def __init

QQ邮箱发送邮件,出现mail from address must be same as authorization user错误

之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authorization user”的错误,网上很多人说是“POP3/SMTP服务”没有开启,登录邮箱查看,发现该服务是开启的. 百思不得其解时,另一个同事说他用另一个QQ邮箱测试,邮件能正常发送,立即进入邮箱对比,发现他的QQ邮箱设置了“独立密码”,联想到抛出的错误提示,顿时大悟,设置独立密码,程序发送邮件时

PHP 利用 QQ 邮箱发送邮件「PHPMailer」

在 PHP 应用开发中,往往需要验证用户邮箱.发送消息通知,而使用 PHP 内置的 mail() 函数,则需要邮件系统的支持. 如果熟悉 IMAP/SMTP 协议,结合 Socket 功能就可以编写邮件发送程序了,不过开发这样一个程序并不容易. 好在 PHPMailer 封装的足够强大,使用它可以更加便捷的发送邮件,免去了我们很多额外的麻烦. PHPMailer PHPMailer 是一个封装好的 PHP 邮件发送类,支持发送 HTML 内容的电子邮件,以及可以添加附件发送,并不像 PHP 本身

JAVA 使用qq邮箱发送邮件

引入一个架包: 代码如下: private static final String QQ_EMAIL_HOST="smtp.qq.com";//qq SMTP服务器 地址 private static final String QQ_EMAIL_PORT="587";//qq SMTP服务器 端口(465这个端口有问题) private static final String QQ_EMAIL_FROM="[email protected]";/

.Net调用QQ邮箱发送邮件

话说网上发送邮件的代码很多,但是我由于不细心,导致拿别人的代码发送邮件老是失败,今天就说说几个要注意的地方吧!!! public bool SendEmail() { MailMessage msg = new MailMessage(); msg.To.Add("[email protected]");//收件人地址 msg.CC.Add("[email protected]");//抄送人地址 msg.From = new MailAddress("[

asp.net使用qq邮箱发送邮件

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Mail; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class Cemail : System.Web.U

asp.net——QQ邮箱发送邮件

1.获取QQ邮箱的授权码 打开QQ邮箱 - 设置 - 账户 - 开启POP3/SMTP服务 -> 根据操作获取授权码 2.设置并发送邮件--方法1 (两种配置方式) -1:配置Web.config,在<configuration>标签中添加以下代码 (aaaaaaaaaa:表示你发信人的邮箱号. bbbbbbbbbb:表示你前面获取的授权码. 端口号port:我测试25能发,而465不能发(不知道为什么).) <system.net> <mailSettings>