zoukankan      html  css  js  c++  java
  • 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邮箱发送邮件。

      

      

  • 相关阅读:
    头文件里面的ifndef /define/endif的作用
    互联网小知识
    IT技术开发人员获得成功的六大步骤
    ab网站压力测试
    微软校招试题
    C程序编译过程浅析
    makefile变量赋值
    printf的题目
    Oracle命名规范
    javascript(js)小数精度丢失的解决方案
  • 原文地址:https://www.cnblogs.com/tangyin/p/9875899.html
Copyright © 2011-2022 走看看