zoukankan      html  css  js  c++  java
  • java邮箱验证

    本文以163邮箱为例

    1、准备(邮箱账号,邮箱必须设置POP3/SMTP/IMAP,设置步骤如下:)

    》》步骤:1 开启授权码服务

    》》步骤:2 手机获取验证码

    》》步骤:3 设置授权码

    》》步骤:4 开启服务smtp/pop3/imap

    》》步骤:5 开启成功,忘记授权码可重设


    2、发送邮件的jar包(以下使用的为maven的pom坐标)

    <!--发送邮件-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-email</artifactId>
                <version>1.5</version>
            </dependency>

    3、代码实现

    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Properties;
    
    //发送邮件
    public class test {
        //配置信息
        private static final String MAIL_TRANSPORT_PROTOCOL ="mail.transport.protocol";//邮件的传输协议
        private static final String MAIL_TRANSPORT_PROTOCOL_VALUE ="smtp";//使用smtp协议
        private static final String MAIL_HOST ="mail.host";//发送邮件的主机
        private static final String MAIL_HOST_VALUE ="smtp.163.com"; //发送邮件的服务器地址
        private static final String MAIL_DEBUG ="mail.debug"; //调试模式
        private static final String MAIL_SMTP_AUTH ="mail.smtp.auth";//邮件smtp作者确认
        private static final String CONFIRM ="true";//确认
        private static final String SEND_ENCODING_LAYOUT ="text/html;charset=utf-8";//发送邮件的编码格式
    
        //邮件编辑信息(仅需写上自己的)
        private static final String MAIL_FROM =xxx@163.com";//邮件发送人
        private static final String MAIL_FROM_PASSWORD ="xxxxx";//邮件发送人授权码
        private static final String MAIL_SUBJECT_REGISTER ="xxxx【注册链接】";//邮件主题(注册链接)
        private static final String MAIL_SUBJECT_VERIFY_CODE ="xxxx【邮箱验证码】";//邮件主题(邮箱验证码)
        private static final String MAIL_ORGANIZATION ="xxxx";//邮件组织
        private static final String MAIL_WEBSITE ="https://www.xxxx.com/";//组织主页
        private static final String MAIL_ORGANIZATION_LOGO ="https://wwwxxxx.com/xxxx/xxxlogo.jpg";//网站logo
        private static final String MAIL_ORGANIZATION_QRCODE ="https://www.xxxx.com/xxxx/xxx.jpg";//网站二维码图片
    
    
        public static void main(String[] args) throws Exception{
            sendEmail(MAIL_FROM,
                    "xxxx@qq.com",
                    MAIL_SUBJECT_REGISTER,
                    prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
                            MAIL_ORGANIZATION_LOGO,
                            prettyRegisterLayout("2小时",MAIL_ORGANIZATION,"https://www.xxxx.com/user/register/8asc824jnd741n2c"),
                            MAIL_ORGANIZATION_QRCODE),
                    MAIL_FROM_PASSWORD);
            sendEmail(MAIL_FROM,
                    "xxxx@qq.com",
                    MAIL_SUBJECT_VERIFY_CODE,
                    prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
                            MAIL_ORGANIZATION_LOGO,
                            prettyQrCodeLayout("2分钟","580123"),
                            MAIL_ORGANIZATION_QRCODE),
                    MAIL_FROM_PASSWORD);
        }
    
        /**
         * 发送邮件
         * @param from 发送人(邮箱地址)
         * @param to 接收人  (邮箱地址)
         * @param subject 主题
         * @param content 内容
         * @param password  密码(密码为授权码不是邮箱的登录密码)
         * @throws Exception
         */
        public static void sendEmail(String from,String to,String subject,String content,String password) throws Exception{
            Properties props = new Properties();//key value:配置参数。真正发送邮件时再配置
            props.setProperty(MAIL_TRANSPORT_PROTOCOL, MAIL_TRANSPORT_PROTOCOL_VALUE);//指定邮件发送的协议,参数是规范规定的
            props.setProperty(MAIL_HOST, MAIL_HOST_VALUE);//指定发件服务器的地址,参数是规范规定的
    //        props.setProperty(MAIL_DEBUG, "true");//邮件发送的调试模式,参数是规范规定的
            props.setProperty(MAIL_SMTP_AUTH, CONFIRM);//请求服务器进行身份认证。参数与具体的JavaMail实现有关
            Session session = Session.getInstance(props);//发送邮件时使用的环境配置
            session.setDebug(true);
            MimeMessage message = new MimeMessage(session);
            //设置邮件的头
            message.setFrom(new InternetAddress(  from  )); //谁发送的
            message.setRecipients(Message.RecipientType.TO,    to   );//发送给谁
            message.setSubject(   subject   );
            //设置正文
            message.setContent(  content  ,SEND_ENCODING_LAYOUT);
    //        message.setText("<h1>hello</h1>");//纯文本
            message.saveChanges();
    
            //发送邮件
            Transport ts = session.getTransport();
            ts.connect(   from  , password  );       // 密码为授权码不是邮箱的登录密码
            ts.sendMessage(message, message.getAllRecipients());//对象,用实例方法}
        }
    
        /**
         * 邮件内容头部
         * @param websiteName 网站名称
         * @param principal 网站主页
         * @param principalImage 网站logo图片超链接
         * @param logoWidth logo图片宽度
         * @param logoHeight logo图片高度
         * @return
         */
        private static String mailHead(String websiteName,String principal,String principalImage,String logoWidth,String logoHeight){
            return "<div style="margin: 0 auto; text-align: left;
    " +
                    "padding: 38px 50px;  560px; font-size: 14px;
    " +
                    "color: #606060; background: #fff; border-radius:
    " +
                    "2px; font-family:Tahoma,Helvetica,'microsoft
    " +
                    "yahei','Hiragino Sans GB',Simsun,sans-serif;
    " +
                    "box-shadow: 0 0 4px rgba(0,0,0,0.2);">
    " +
                    "        <table style="margin: 0 auto;
    " +
                    "text-align: left; font-size: 14px; color: #606060;
    " +
                    "background: #fff; font-family: inherit;
    " +
                    "font-family:Tahoma,Helvetica,'microsoft
    " +
                    "yahei','Hiragino Sans GB',Simsun,sans-serif;" width="560" cellspacing="0" cellpadding="0" border="0">
    " +
                    "            <tbody><tr>
    " +
                    "                <th colspan="2"><a href=""+principal+"" rel="noopener" target="_blank"><img src=""+principalImage+"" width=""+logoWidth+"" height=""+logoHeight+""></a></th>
    " +
                    "            </tr>
    " +
                    "            <tr>
    " +
                    "                <td colspan="2" style="font-size:
    " +
                    "18px; padding: 30px 0
    " +
                    "18px;">尊敬的"+websiteName+"用户:</td>
    " +
                    "            </tr>
    " +
                    "            <tr>
    " +
                    "                <td colspan="2" style="line-height: 1.8;">
    " +
                    "                   
    " +
                    "<div>欢迎使用"+websiteName+"!</div>
    ";
        }
    
        /**
         * 邮件内容脚部
         * @param websiteName 网站名称
         * @param principal 网站主页
         * @param qrCode 二维码图片链接(可不填写/仅支持第一张)
         * @return
         */
        private static String mailFoot(String websiteName,String principal,String...qrCode){
            SimpleDateFormat sdf  = new SimpleDateFormat("yyyy年MM月dd日");
            String nowDate =sdf.format(new Date());
            return "            <tr>
    " +
                    "                <td colspan="2" style="text-align:
    " +
                    "right; line-height: 1.8; padding-bottom: 18px;">
    " +
                    "                    <div>"+websiteName+"团队</div>
    " +
                    "                    <div style="color:
    " +
                    "#909090;">"+nowDate+"</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    " +
                    (qrCode!=null&&qrCode.length!=0?setQrCode(websiteName,qrCode[0]):"")+
                    "            <tr>
    " +
                    "                <td colspan="2" style="padding-top: 20px; border-top: 1px solid
    " +
                    "#e7e7e7; line-height: 1.8; font-size: 12px; color:
    " +
                    "#909090;">
    " +
                    "                    <div>温馨提示:</div>
    " +
                    "                    <div>1.
    " +websiteName+
                    "官方网址为:<a href=""+principal+"" rel="noopener" target="_blank">"+principal+"</a>,请注意网址,防止钓鱼。</div>
    " +
                    "                    <div>2.
    " +
                    "本邮件为系统自动发出,请勿回复。</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    " +
                    "        </tbody></table>
    " +
                    "    </div>";
        }
    
        /**
         * 输出漂亮格式(带logo,可带二维码)
         * @param websiteName 网站名称
         * @param principal 主页地址
         * @param principalImage 主页logo 323 x 48 拉伸宽度为 (超链接形式)
         * @param business 业务
         * @param qrCode 二维码 (超链接形式)
         * @return
         */
        private static String prettyLayout(String websiteName,String principal,String principalImage,String business,String...qrCode){
            return mailHead(websiteName,principal,principalImage,"","")+
                    business +
                    mailFoot(websiteName,principal,qrCode);
    
    
        }
    
    
        /**
         * 二维码 样式A
         * @param websiteName //网站名称
         * @param qrCode //二维码图片链接
         * @return
         */
        private static String setQrCode(String websiteName,String qrCode){
            return "            <tr>
    " +
                    "                <td style="padding-bottom: 20px;" width="145">
    " +
                    "                    <img src=""+qrCode+"" width="110" height="112">
    " +
                    "                </td>
    " +
                    "                <td style="line-height: 2;
    " +
                    "padding-bottom: 20px;">
    " +
                    "                    <div style="font-size: 18px;
    " +
                    "color:
    " +
                    "#03c5ff;">扫描关注"+websiteName+"公众号</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    " ;
        }
    
        /**
         * 发送邮箱验证码
         * @param validity 有效期/单位自行填写
         * @param verifyCode 验证码
         * @return
         */
        private static String prettyQrCodeLayout(String validity,String verifyCode){
            return "<div>邮箱验证码的有效期为:"+validity+"邮箱验证码如下:</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    " +
                    "            <tr>
    " +
                    "                <td colspan="2" style="font-size:
    " +
                    "12px; line-height: 20px; padding-top: 14px;
    " +
                    "padding-bottom: 25px; color: #909090;">
    " +
                    "                    <div>"+verifyCode+"</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    ";
        }
    
        /**
         * 发送邮箱注册激活链接
         * @param validity 有效期/单位自行填写
         * @param websiteName 网站名
         * @param verifyLink 注册验证链接
         * @return
         */
        private static String prettyRegisterLayout(String validity,String websiteName,String verifyLink){
            return  "<div>请点击以下的链接验证您的邮箱,验证成功后就可以使用"+websiteName+"提供的服务了。</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    " +
                    "            <tr>
    " +
                    "                <td colspan="2" style="font-size:
    " +
                    "12px; line-height: 20px; padding-top: 14px;
    " +
                    "padding-bottom: 25px; color: #909090;">
    " +
                    "                    <div>该链接的有效期为"+validity+",如链接超过有效期请重新发送邮件<a href=""+verifyLink+"" style="color: #03c5ff; text-decoration:
    " +
                    "underline;" rel="noopener" target="_blank">"+verifyLink+"</a></div>
    " +
                    "                    <div style="padding-top:
    " +
                    "4px;">(如果不能打开页面,请复制该地址到浏览器打开)</div>
    " +
                    "                </td>
    " +
                    "            </tr>
    ";
        }
    
    
    }

     随机数:

    /**
         * 方法1 可配置随机数
         */
        public static final String VERIFY_CODES = "0123456789";
    
        public static String generateVerifyCode(int verifySize){
    
            return generateVerifyCode(verifySize, VERIFY_CODES);
        }
    
        /**
         * 使用指定源生成验证码
         * @param verifySize 验证码长度
         * @param sources 验证码字符源
         * @return
         */
        public static String generateVerifyCode(int verifySize, String sources){
            if(sources == null || sources.length() == 0){
                sources = VERIFY_CODES;
            }
            int codesLen = sources.length();
            Random rand = new Random(System.currentTimeMillis());
            StringBuilder verifyCode = new StringBuilder(verifySize);
            for(int i = 0; i < verifySize; i++){
                verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1)));
            }
            System.out.println(verifyCode.toString());
            return verifyCode.toString();
        }
    
        /**
         * 方法二直接生成6位数随机数
         * @return
         */
        public static Integer getCode() {
            Random random = new Random();
            int identifyCode = (random.nextInt(999999));
            if (identifyCode < 100000) {
                identifyCode += 100000;
            }
          System.out.println(identifyCode);
            return identifyCode;
        }
  • 相关阅读:
    Netty Nio启动全流程
    线性表
    java stream 原理
    SpringBoot 分布式session
    mockito
    RxJava
    HandlerMapping 详解
    SpringMVC 架构
    Spring Cloud 配置服务
    SpringBoot常用配置简介
  • 原文地址:https://www.cnblogs.com/Angdybo/p/13631954.html
Copyright © 2011-2022 走看看