精华内容
下载资源
问答
  • Java实现邮箱验证

    2019-10-07 17:09:15
    Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的...

    Java实现邮箱验证

     

    JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

     

    电子邮箱:用户在邮箱服务器上申请的一个账号。

     

    邮件收发协议

    SMTP协议

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

    默认端口号为25

     

    POP3协议

    POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

    默认端口号为110

     

    邮件收发过程

    邮箱服务器

    eyoumailservicesetup.exe 易邮服务器

    foxmail65.exe

     

    转载于:https://www.cnblogs.com/ioveNature/p/6524082.html

    展开全文
  • Java 实现邮箱验证

    千次阅读 2018-09-24 13:37:15
    看了慕课上的一个视频,做的邮箱验证。 课程视频:https://www.imooc.com/learn/770 1 准备 基础知识 smpt pop3 视频里面有简单介绍,不赘述。 数据库 MySQL数据库 连接池实现连接cp03 创建数据表user servlet...

    看了慕课上的一个视频,做的邮箱验证。

    课程视频:https://www.imooc.com/learn/770

    1 准备

    基础知识 smpt pop3  视频里面有简单介绍,不赘述。

    数据库 MySQL数据库 连接池实现连接cp03   创建数据表user

    servlet实现功能

    jsp实现页面

    2 实现思路

    本实践使用idea实现,建立一个maven项目,直接用pom文件注入依赖,不用自己下载导入jar包,我比较懒,自己学的,就简单的弄了。

    思路的话:首先明确自己要做什么,任务是什么,其次如何做,编程的逻辑思想,最后就动手了,动手实现过程问题会慢慢出来,一点点改一点点解决。

    使用mvc的框架思考。model层建立user类,建立对用的dao,建立service包,实现服务,最后是servlet调用服务,网页跳转逻辑

     

    3 动手实践

    创建maven 工程,配置pom文件。视频用的是eclipse 导入以下jar包。

    pom文件配置导入依赖:

    <dependencies>
       <!-- JavaEE依赖 -->
       <dependency>
          <groupId>javaee</groupId>
          <artifactId>javaee-api</artifactId>
          <version>5</version>
          <scope>test</scope>
       </dependency>
       <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
       </dependency>
       <!-- mysql驱动依赖 -->
       <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.40</version>
       </dependency>
       <!-- c3p0依赖 -->
       <dependency>
          <groupId>c3p0</groupId>
          <artifactId>c3p0</artifactId>
          <version>0.9.1.2</version>
       </dependency>
       <!-- JavaMail相关依赖 -->
       <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4.7</version>
       </dependency>
       <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>activation</artifactId>
          <version>1.1.1</version>
       </dependency>
       <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
       </dependency>
    
    </dependencies>

    创建用户数据表user

     

    创建注册页面 index.jsp

    代码实现业务逻辑

    1. 用户填写相关信息,点击注册按钮
    2. 系统先将用户记录保存到数据库中,其中用户状态为未激活
    3. 系统发送一封邮件并通知用户去验证
    4. 用户登录邮箱并点击激活链接
    5. 系统将用户状态更改为已激活并通知用户注册成功

    包结构:

    首先,用户提交注册信息后,相应的servlet会将相关信息传给service层去处理,在service中将记录保存到数据库中(调用dao层),然后再给用户发送一封邮件,UserServiceImpl实现发送验证邮件,发送邮件功能使用Mail Util工具类实现(新建一个线程去执行发送邮件的任务,)。

    Note:此处使用c3p0来作为数据源来替代DriverManager,在频繁获取释放数据库连接时效率会大大提高。上面截图中DBUtil是c3p0数据池实现的连接

    使用JavaMail发送邮件三步:

    1. 创建连接对象javax.mail.Session
    2. 创建邮件对象 javax.mail.Message
    3. 发送邮件
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    public class MailUtil implements Runnable {
    	private String email;// 收件人邮箱
    	private String code;// 激活码
    
    	public MailUtil(String email, String code) {
    		this.email = email;
    		this.code = code;
    	}
    
    	public void run() {
    		// 1.创建连接对象javax.mail.Session
    		// 2.创建邮件对象 javax.mail.Message
    		// 3.发送一封激活邮件
    		String from = "2583665402@qq.com";// 发件人电子邮箱
    		String host = "smtp.qq.com"; // 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易)
    
    		Properties properties = System.getProperties();// 获取系统属性
    
    		properties.setProperty("mail.smtp.host", host);// 设置邮件服务器
    		properties.setProperty("mail.smtp.auth", "true");// 打开认证
    
    		try {
    			//QQ邮箱需要下面这段代码,163邮箱不需要
    			MailSSLSocketFactory sf = new MailSSLSocketFactory();
    			sf.setTrustAllHosts(true);
    			properties.put("mail.smtp.ssl.enable", "true");
    			properties.put("mail.smtp.ssl.socketFactory", sf);
    			
    			
    			// 1.获取默认session对象
    			Session session = Session.getDefaultInstance(properties, new Authenticator() {
    				public PasswordAuthentication getPasswordAuthentication() {
    					return new PasswordAuthentication("2583665402@qq.com", "pcdbjjmxxavjdjbh"); // 发件人邮箱账号、授权码
    				}
    			});
    
    			// 2.创建邮件对象
    			Message message = new MimeMessage(session);
    			// 2.1设置发件人
    			message.setFrom(new InternetAddress(from));
    			// 2.2设置接收人
    			message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
    			// 2.3设置邮件主题
    			message.setSubject("账号激活");
    			// 2.4设置邮件内容
    			String content = "<html><head></head><body><h1>这是一封激活邮件,激活请点击以下链接</h1><h3><a href='http://localhost:8080/ActiveServlet?code="
    					+ code + "'>http://localhost:8080/ActiveServlet?code=" + code
    					+ "</href></h3></body></html>";
    			message.setContent(content, "text/html;charset=UTF-8");
    			// 3.发送邮件
    			Transport.send(message);
    			System.out.println("邮件成功发送!");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     

    ps:需要把上面的账号、授权码进行相应修改。

     

    4上传至GitHub 作为自己的学习积累

    实现代码:https://github.com/LLZ2018/emailValidate/tree/master/emailValidate-master

     

    5 不相关内容: 两个上传项目到GitHub的方法。

    本地idea项目上传到GitHub上  https://blog.csdn.net/titymt/article/details/79766506

    本地项目通过github客户端上传到github网站上  https://blog.csdn.net/qq_30960163/article/details/52589488

     

    展开全文
  • java实现邮箱验证

    2017-09-04 16:15:17
    在一般的网站登录密码找回项目中都有邮箱找回密码的功能,那么如何让代码实现收发邮件呢? package it.com.service; import java.math.BigInteger; import java.security.MessageDigest; import java.security....

    在一般的网站登录密码找回项目中都有邮箱找回密码的功能,那么如何让代码实现收发邮件呢?

    package it.com.service;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Date;
    import java.util.Properties;
    
    import javax.mail.MessagingException;
    import javax.mail.NoSuchProviderException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    public class EmailUser {
    	   public static String myEmailAccount = "cdefgab1234@126.com";
    	    public static String myEmailPassword = "***********";//这里填写的是邮箱的授权码,可以在自己邮箱里进行设置,每个人的不一样,填写邮箱密码也可以(网易邮箱)
    //	  public static String myEmailAccount = "279656813@qq.com";
    //	    public static String myEmailPassword = "gofbgrxommkxbhaj";
    	    // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
    	    // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
    	    //这里改为网易126的邮箱
    	    public static String myEmailSMTPHost = "smtp.126.com";
    
    	    // 收件人邮箱(替换为自己知道的有效邮箱)
    	    public static String receiveMailAccount = "291684082@qq.com";
    
    	    public String md5(String inputStr){
    	    	
    			  BigInteger bigInteger=null;//高精度数据类型
    			try {
    				MessageDigest md = MessageDigest.getInstance("md5");//说明加密类型
    				 byte[] inputData = inputStr.getBytes();//字符转换成字节
    			     md.update(inputData); //加密
    			     bigInteger = new BigInteger(md.digest());//转换成高精度数字类型 
    			    // System.out.println("MD加密后:" + bigInteger.toString()); //输出
    			} catch (NoSuchAlgorithmException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    	    }
    			return bigInteger.toString();
    	    }
    	
    	    
    	    public String  activationCode(){
    	    	//System.out.println(md5("ab45c9"));
    	    	return "ab45c9";
    	    }
    	    String key=null;
    	    public String  smtpToEmail(){
    	        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
    	        Properties props = new Properties();                    // 参数配置
    	        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
    	        props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
    	        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
    	        
    	        // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
    	        //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
    	        //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
    	        /*
    	        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
    	        //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
    	        //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
    	        final String smtpPort = "465";
    	        props.setProperty("mail.smtp.port", smtpPort);
    	        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    	        props.setProperty("mail.smtp.socketFactory.fallback", "false");
    	        props.setProperty("mail.smtp.socketFactory.port", smtpPort);
    	        */
    
    	        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
    	        Session session = Session.getDefaultInstance(props);
    	        session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
    	        // 3. 创建一封邮件
    	        MimeMessage message=null;
    			try {
    				message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	        // 4. 根据 Session 获取邮件传输对象
    	        Transport transport = null;
    			try {
    				transport = session.getTransport();
    			} catch (NoSuchProviderException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	        // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
    	        // 
    	        //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
    	        //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
    	        //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
    	        //
    	        //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
    	        //           (1) 邮箱没有开启 SMTP 服务;
    	        //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
    	        //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
    	        //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
    	        //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
    	        //
    	        //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
    			
    				try {
    					transport.connect(myEmailAccount, myEmailPassword);
    				} catch (MessagingException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			
    
    	        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
    	        try {
    				transport.sendMessage(message, message.getAllRecipients());
    			} catch (MessagingException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    
    	        // 7. 关闭连接
    	        try {
    				transport.close();
    			} catch (MessagingException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			return  key;
    	    }
    
    	    /**
    	     * 创建一封只包含文本的简单邮件
    	     *
    	     * @param session 和服务器交互的会话
    	     * @param sendMail 发件人邮箱
    	     * @param receiveMail 收件人邮箱
    	     * @return
    	     * @throws Exception
    	     */
    	    public  MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
    	        // 1. 创建一封邮件
    	        MimeMessage message = new MimeMessage(session);
    
    	        // 2. From: 发件人
    	        message.setFrom(new InternetAddress(sendMail, "陕西华信", "UTF-8"));
    
    	        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
    	        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
    
    	        // 4. Subject: 邮件主题
    	        message.setSubject("打折钜惠", "UTF-8");
    	        //得到激活码
    	        key=activationCode();
    	        System.out.println("=====1="+key);
    	        // 5. Content: 邮件正文(可以使用html标签)
    	        message.setContent("<a href='http://127.0.0.1:8080/test0508EmailFindPwd/servlet/ActivationUser?key="+key+">aaaaaaaa</a>", "text/html;charset=UTF-8");
    
    	        // 6. 设置发件时间
    	        message.setSentDate(new Date());
    
    	        // 7. 保存设置
    	        message.saveChanges();
    
    	        return message;
    	    }
    	    public static void main(String[] args) {
    	    	EmailUser m=new EmailUser();
    	    	//m.activationCode();
    	    	System.out.println("*"+m.smtpToEmail());
    	    	try {
    				Thread.sleep(1000);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	    	//m.activationCode();
    		}
    }
    

    这样就会收到一封邮件



    打开邮件后,里面的a标签自带地址,和地址栏参数。大家根据情况自行更改,这里不再赘述了。

    展开全文
  • JAVA实现邮箱验证

    2016-01-14 17:09:26
    以163邮箱为例 ServiceException类 public class ServiceException extends Exception { private static final long serialVersionUID = -1708015121235851228L; public ServiceException(String message) {...

    首先需要javax.mail的mail-1.4.7.jar

    		<dependency>
    			<groupId>javax.mail</groupId>
    			<artifactId>mail</artifactId>
    			<version>1.4.7</version>
    		</dependency>
    注册的业务

    	public void processRegister(User model) {
    		/// 如果处于安全,可以将激活码处理的更复杂点
    		// user.setValidateCode(MD5Tool.MD5Encrypt(email));
    		model.setValidateCode(MD5Util.encode2hex(model.getEmail()));
    		// 保存注册信息
    		userMapper.insert(model);
    		/// 邮件的内容
    		StringBuffer sb = new StringBuffer("点击下面链接激活账号,链接只能使用一次,请尽快激活!<br/>");
    		sb.append("http://localhost:8080/registerValidate?email=");
    		sb.append(model.getEmail());
    		sb.append("&validateCode=");
    		sb.append(model.getValidateCode());
    		// 发送邮件
    		SendEmail.send(model.getEmail(), sb.toString());
    	}
    传入的model是经过前台验证的实体

    MD5Util类

    public class MD5Util {
    	/**
    	 * 将源字符串使用MD5加密为字节数组
    	 */
    	public static byte[] encode2bytes(String source) {
    		byte[] result = null;
    		try {
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			md.reset();
    			md.update(source.getBytes("UTF-8"));
    			result = md.digest();
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	/**
    	 * 将源字符串使用MD5加密为32位16进制数
    	 */
    	public static String encode2hex(String source) {
    		byte[] data = encode2bytes(source);
    		StringBuffer hexString = new StringBuffer();
    		for (int i = 0; i < data.length; i++) {
    			String hex = Integer.toHexString(0xff & data[i]);
    			if (hex.length() == 1) {
    				hexString.append('0');
    			}
    			hexString.append(hex);
    		}
    		return hexString.toString();
    	}
    
    	/**
    	 * 验证字符串是否匹配
    	 * 
    	 * @param unknown
    	 *            待验证的字符串
    	 * @param okHex
    	 *            使用MD5加密过的16进制字符串
    	 * @return 匹配返回true,不匹配返回false
    	 */
    	public static boolean validate(String unknown, String okHex) {
    		return okHex.equals(encode2hex(unknown));
    	}
    }
    SendEmail类

    public class SendEmail {
    	public static final String HOST = "smtp.163.com";
    	public static final String PROTOCOL = "smtp";
    	public static final int PORT = 25;
    	public static final String FROM = "xxxxxxxxxx@163.com";// 发件人的email
    	public static final String PWD = "xxxxxxxx";// 发件人密码
    
    	/**
    	 * 获取Session
    	 */
    	private static Session getSession() {
    		Properties props = new Properties();
    		props.put("mail.smtp.host", HOST);// 设置服务器地址
    		props.put("mail.store.protocol", PROTOCOL);// 设置协议
    		props.put("mail.smtp.port", PORT);// 设置端口
    		props.put("mail.smtp.auth", true);
    		Authenticator authenticator = new Authenticator() {
    			@Override
    			protected PasswordAuthentication getPasswordAuthentication() {
    				return new PasswordAuthentication(FROM, PWD);
    			}
    		};
    		Session session = Session.getDefaultInstance(props, authenticator);
    		return session;
    	}
    
    	public static void send(String toEmail, String content) {
    		Session session = getSession();
    		try {
    			// Instantiate a message
    			Message msg = new MimeMessage(session);
    
    			// Set message attributes
    			msg.setFrom(new InternetAddress(FROM));
    			InternetAddress[] address = { new InternetAddress(toEmail) };
    			msg.setRecipients(Message.RecipientType.TO, address);
    			msg.setSubject("账号激活邮件");
    			msg.setSentDate(new Date());
    			msg.setContent(content, "text/html;charset=utf-8");
    
    			// Send the message
    			Transport.send(msg);
    		} catch (MessagingException mex) {
    			mex.printStackTrace();
    		}
    	}
    }
    以163邮箱为例

    ServiceException类

    public class ServiceException extends Exception {
    	private static final long serialVersionUID = -1708015121235851228L;
    
    	public ServiceException(String message) {
    		super(message);
    	}
    }
    






    展开全文
  • java实现邮箱验证

    2017-09-24 13:27:30
    java实现邮箱验证其实很简单 我们只需要一个jar包 mail.jar点击打开链接 先创建一个邮箱发送类 public class MailUtils { public static void sendMail(String email, String emailMsg) throws ...
  • 【实战】Java实现邮箱验证

    千次阅读 2018-05-04 11:22:15
    Java实现邮箱验证一、JavaMail1.什么是JavaMail? JavaMail,提供给开发者处理电子邮件相关的编程接口,它是sun发布的用来处理email的API,它可以方便地执行一些常用的邮件传输。2.为什么要学习JavaMail? 用户...
  • 思路:android端传送邮箱地址给后台,后台获取邮箱地址后,链接公司邮箱,并发送验证码邮件,并返回邮箱地址+验证码给Android端,Android进行验证邮箱地址和验证码是否匹配。直接上后台代码,已经写成工具类,注释...
  • Java实现邮箱验证功能

    千次阅读 2019-05-17 02:23:27
    (p.s.减少出现554垃圾邮件 1。先给自己抄送一份: message.addRecipient(Message.RecipientType.CC, new InternetAddress(from));...message.setHeader("Header", "SHShop激活验证"); //添加header,防止网易...
  • 在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机... ... ...接下来让我们一起来使用最简单的JSP+Servlet的方式来完成一个通过邮箱验证注册的小案例吧。 准备工作 前提知...
  • java 实现邮箱验证注册

    千次阅读 2017-03-07 20:18:50
    这是一个imooc网上的一个项目,感觉老师讲的还行,现在理理思路,我觉得难点是在...//获取非共享的session对象,在真正使用创建的过程中,往往会让我们验证密码 Session session =Session.getInstance(prop,new Authe
  • 在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件... ... ...接下来让我们一起来使用最简单的JSP+Servlet的方式来完成一个通过邮箱验证注册的小案例吧。 准备工作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 440
精华内容 176
关键字:

java实现邮箱验证

java 订阅