• java 阿里云邮箱发送邮件并判断验证码是否过期


    一. 发送邮件

    链接: java给各个邮箱发邮件,不包括阿里邮箱发送邮件  https://www.cnblogs.com/java-h/p/11344331.html

    参考链接:阿里云邮箱发送邮件 https://www.cnblogs.com/lccsdncnblogs/p/15793357.html

    总体流程:首先需要一个企业邮箱,及这个邮箱的密码。相当于发送者。由这个邮箱可以给任意邮箱发送邮件。

    如使用QQ邮箱当作发送者,则还需要设置鉴权码。具体百度

    pom.xml 引入 mail 发送邮件的依赖

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

    代码实现:

    package com.systron.utils;
    
    import org.apache.commons.lang.StringUtils;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.security.Security;
    import java.util.Properties;
    
    /**
     * 使用阿里云邮箱发送邮件工具类
     * 阿里云邮箱为联想企业邮箱
     */
    public class SendMailUtil {
    
        public static final String ALIDM_SMTP_HOST = "smtp.qiye.aliyun.com";
    
        public static final String ALIDM_SMTP_PORT = "25";
    
    
        /**
         * 发送邮件
         * @param sendAddress  发件人地址
         * @param sendPassword 发件人密码
         * @param host         协议
         * @param port         端口
         * @param subject      标题
         * @param content      内容
         * @param filePath     附件地址
         * @param CC           抄送人
         * @throws Exception
         * @throws AddressException
         */
        public static void sendMail(String sendAddress, String sendPassword, String host, String port, String subject, String content, String internetAddress, String filePath, String CC) throws AddressException, Exception {
            //设置SSL连接、邮件环境
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
            Properties props = System.getProperties();
            props.setProperty("mail.smtp.host", host);
            props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
            props.setProperty("mail.smtp.socketFactory.fallback", "false");
            props.setProperty("mail.smtp.port", port);//设置端口
            props.setProperty("mail.debug", "true");//启用调试
            props.setProperty("mail.smtp.socketFactory.port", "465");
            props.setProperty("mail.smtp.auth", "true");
            //建立邮件会话
            Session session = Session.getDefaultInstance(props, new Authenticator() {   //身份认证
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(sendAddress, sendPassword);//发件人账号、密码
                }
            });
            //建立邮件对象
            MimeMessage message = new MimeMessage(session);
            //设置邮件的发件人、收件人、主题
            //附带发件人名字
            //  message.setFrom(new InternetAddress("from_mail@qq.com", "optional-personal"));
            message.setFrom(new InternetAddress(sendAddress));//发件人账号
            message.setRecipients(Message.RecipientType.TO, internetAddress);//收件人账号
    
            //标题
            message.setSubject(subject);//邮件标题
    
            //内容
            Multipart multipart = new MimeMultipart();
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setContent(content, "text/html;charset=utf-8");//邮件内容
            multipart.addBodyPart(contentPart);
    
            //附件部分
            if (StringUtils.isNotEmpty(filePath)) {
                BodyPart attachPart = new MimeBodyPart();
                FileDataSource fileDataSource = new FileDataSource(filePath);//附件地址
                attachPart.setDataHandler(new DataHandler(fileDataSource));
                attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));
                multipart.addBodyPart(attachPart);
            }
    
            message.setContent(multipart);
    
            //抄送地址
            if (StringUtils.isNotBlank(CC)) {
                InternetAddress[] internetAddressCC = new InternetAddress().parse(CC);
                message.setRecipients(Message.RecipientType.CC, internetAddressCC);
            }
    
            //发送邮件
            Transport.send(message);
        }
    
        // 测试
        public static void main(String[] args) {
    //        CacheConfigUtil.getProperty("ali.email.name");
    //        CacheConfigUtil.getProperty("ali.email.password");
    
            try {
                sendMail("发送者邮箱", "发送者邮箱密码", ALIDM_SMTP_HOST, ALIDM_SMTP_PORT, "邮件标题",
                        "邮件内容", "接收者邮箱", null, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    二. 判断邮件中验证码是否过期

    步骤一:给接收人发送邮件,邮件中包含6位验证码。将验证码存入缓存,10分钟过期

    步骤二:判断用户输入的验证码和缓存中的验证码是否一致,一致则验证通过,不一致则提示验证码过期

    import org.apache.commons.lang.StringUtils;
    import org.springframework.ui.Model;
    import org.systron.utils.SendMailUtil;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class Test {
    
        /**
         * 步骤一:给接收人发送邮件,邮件中包含6位验证码。将验证码存入缓存,10分钟过期
         * @param request
         * @param response
         * @param model
         */
        public void sendCode(HttpServletRequest request, HttpServletResponse response, Model model) {
            String userEmail = "XXX@qq.com"; // 接收人邮箱
    
            String random = "123456"; // 6位验证码
            String title = "邮件标题";
            String content = "邮件内容";
            try {
                SendMailUtil.sendMail(title, content, userEmail, null, null);
    
                try {
                    final HttpSession httpSession = request.getSession();
                    httpSession.setAttribute(userEmail, random); // 将接收人邮箱和验证码存入缓存
    
                    final Timer timer = new Timer();
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            httpSession.removeAttribute(userEmail);
                            timer.cancel();
                        }
                    }, 10 * 60 * 1000); // 10分钟后过期  10 * 60 * 1000
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 步骤二:判断用户输入的验证码和缓存中的验证码是否一致,一致则验证通过,不一致则提示验证码过期
         * @param request
         * @param response
         * @param model
         */
        public void validateCodeApi(HttpServletRequest request, HttpServletResponse response, Model model) {
            String userEmail = request.getParameter("userEmail");
            String validateCode = request.getParameter("validateCode");
    
            String code = (String) request.getSession().getAttribute(userEmail); // 根据用户邮箱取得session中的验证码
            if (StringUtils.isNotEmpty(code)) {
                if (!code.equals(validateCode)) { // 验证用户输入的验证码和缓存中的验证码是否一致
                    // 不一致,返回验证码过期信息
                    System.out.println("验证码已过期");
                }
            } else {
                System.out.println("验证码已过期");
            }
        }
    }
  • 相关阅读:
    (译)linux系统关于命令echo的15个例子
    linux之grep实例讲解
    linux grep练习
    (译)"usermod"命令使用完全指导---15个练习例程截图
    linux分区,文件系统,目录结构概述
    Linux 配置YUM
    Linux 强制安装rpm 包
    $LANG、$NLS_LANG 记录一下
    Oracle性能诊断艺术-相关脚本说明
    datafile相关(add、rename、drop)
  • 原文地址:https://www.cnblogs.com/aiyowei/p/16131009.html
Copyright © 2020-2023  润新知