zoukankan      html  css  js  c++  java
  • java实现注册邮箱激活验证

    一般情况注册账户激活时有发送六位数字激活码和发送激活地址两种常见的方式,今天来总结一下

    一.发送六位数字激活码的方式(用qq邮箱或者163邮箱发邮件,注意前提是要拿到授权码滴,下文有说到)

    1.新建一个maven项目,结构如下

    2.pom.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License at
    
       http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.
    -->
    <!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <packaging>war</packaging>
    
      <name>mail</name>
      <groupId>com.cyf</groupId>
      <artifactId>mail</artifactId>
      <version>1.0-SNAPSHOT</version>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.7</version>
            <configuration>
              <connectors>
                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                  <port>8888</port>
                  <maxIdleTime>30000</maxIdleTime>
                </connector>
              </connectors>
              <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
              <contextPath>/</contextPath>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencies>
        <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4</version>
        </dependency>
      </dependencies>
    
    </project>

    3.发送邮件MailUtil.java

    package com;
    
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    
    public class MailUtil {
        /**
         * 使用网易邮箱发送邮件
         *
         * @param to   给谁发
         * @param text 发送内容
         */
        public static void send_mail(String to, String text) throws MessagingException {
            //创建连接对象 连接到邮件服务器
            Properties properties = new Properties();
            //设置发送邮件的基本参数
            //发送邮件服务器
    
            properties.put("mail.smtp.host", "smtp.163.com");
            //发送端口
            properties.put("mail.smtp.port", "25");
            properties.put("mail.smtp.auth", "true");
    
            //设置发送邮件的账号和密码
            Session session = Session.getInstance(properties, new Authenticator() {
                @Override
                protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
    
    //                return new javax.mail.PasswordAuthentication("你的网易邮箱", "你的网易邮箱授权码");
                    return new javax.mail.PasswordAuthentication("17621831595@163.com", "cuiyanfei211");
                }
            });
    
            //创建邮件对象
            Message message = new MimeMessage(session);
            //设置发件人
            try {
                message.setFrom(new InternetAddress("17621831595@163.com"));
                //设置收件人
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                //设置主题
                message.setSubject("这是一份测试邮件");
                //设置邮件正文  第二个参数是邮件发送的类型
                message.setContent(text, "text/html;charset=UTF-8");
                //发送一封邮件
                Transport.send(message);
            } catch (javax.mail.MessagingException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 使用qq邮箱发送邮件
         *
         * @param to   给谁发
         * @param text 发送内容
         */
        public static void send_mail2(String to, String text) throws MessagingException {
            //创建连接对象 连接到邮件服务器
            Properties properties = new Properties();
            //设置发送邮件的基本参数
            //发送邮件服务器
    
            properties.put("mail.smtp.host", "smtp.qq.com");
            //发送端口
            properties.put("mail.smtp.port", "587");
            properties.put("mail.smtp.auth", "true");
    
    
            //设置发送邮件的账号和密码
            Session session = Session.getInstance(properties, new Authenticator() {
                @Override
                protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
    //                return new javax.mail.PasswordAuthentication("你的QQ邮箱", "你的qq邮箱授权码");
                    return new javax.mail.PasswordAuthentication("1741258558@qq.com", "sxmvraycsmkaddag");
                }
            });
    
            //创建邮件对象
            Message message = new MimeMessage(session);
            //设置发件人
            try {
                message.setFrom(new InternetAddress("1741258558@qq.com"));
                //设置收件人
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                //设置主题
                message.setSubject("这是一份测试邮件");
                //设置邮件正文  第二个参数是邮件发送的类型
                message.setContent(text, "text/html;charset=UTF-8");
                //发送一封邮件
                Transport.send(message);
            } catch (javax.mail.MessagingException e) {
                e.printStackTrace();
            }
    
        }
    }

    4.测试类

    package com;
    
    public class Test {
        public static void main(String[] args) {
    
    
            //发送太多可能会被拦截到垃圾箱
            //用网易发邮件,qq邮箱收邮件
    //            MailUtil.send_mail("1741258558@qq.com", String.valueOf("激活码啊b:"+(int)((Math.random()*9+1)*100000)));
    //            MailUtil.send_mail2("1741258558@qq.com", String.valueOf("激活码啊b:"+(int)((Math.random()*9+1)*100000)));
            //用qq发邮件,网易邮箱收邮件
            try {
                MailUtil.send_mail("17621831595@163.com", String.valueOf("激活码啊a:" + (int) ((Math.random() * 9 + 1) * 100000)));
                MailUtil.send_mail2("17621831595@163.com", String.valueOf("激活码啊a:" + (int) ((Math.random() * 9 + 1) * 100000)));
                System.out.println("发送邮件成功");
            } catch (javax.mail.MessagingException e) {
                e.printStackTrace();
            }
    
    
        }
    }

    二.介绍发送激活地址的方式

    package com;
    
    public class Test2 {
        public static void main(String[] args) {
    
            try {
                //发送太多可能会被拦截到垃圾箱
    
                MailUtil.send_mail("1741258558@qq.com", "<a href='http://localhost:8086/goods/RegistServlet.do?flag=3&loginname=abcdef'>点此激活</a>");
                System.out.println("发送邮件成功");
            } catch (javax.mail.MessagingException e) {
                e.printStackTrace();
            }
    
    
        }
    }

    注意:测试过程中可能出现的问题

    用网易邮箱发送时

    用qq邮箱发送时

    这两个异常的原因是服务没有启用POP3/SMTP服务,请参考我的上一篇博客开启POP3/SMTP服务

    启用服务后,问题就会解决啦,祝你编码愉快!

  • 相关阅读:
    JavaWeb开发小结
    第一个Maven案例Hello Maven
    数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结
    执行计划
    五分钟搞死一台服务器
    RAC 移动 OCR
    使用DBMS_STATS来收集统计信息【转】
    关于Freelists和Freelist Groups的研究【转】
    [转]Oracle中INITRANS和MAXTRANS参数
    linux套件安装过程中configure,make,make install的作用
  • 原文地址:https://www.cnblogs.com/feifeicui/p/8573050.html
Copyright © 2011-2022 走看看