发送激活邮件「建议收藏」

发送激活邮件「建议收藏」发送激活邮件

大家好,又见面了,我是你们的朋友全栈君。

     我们每天都会接收,发送邮件,今天就来讲一讲邮件发送的原理以及如何实现。

邮件发送的原理

基本概念

邮件服务器:跟web服务器一样,我们每一个电子邮箱的所有信息都会保存在邮件服务器上,在web服务器上也保存着各种各样的网页信息。

邮件协议:还记得我们配置Foxmail时的SMTP协议和POP3协议吗?SMTP就是发送邮件的协议。而POP是接收邮件的协议,现在常用的是第三版,所以也称POP3协议。

原理过程

 发送激活邮件「建议收藏」

     假如用户abc@sina.com想要给abc@163.com发送一封邮件,具体过程为:

abc@sina.com给abc@163.com发送邮件

1.登录邮箱客户端

2.连接新浪的SMTP服务器

3.编写邮件并保存到本地

4.发送到163的SMTP服务器上

5.163的SMTP服务器保存邮件

abc@163.com接收邮件

6.登录邮箱客户端

7.连接到163的POP3服务器

8.找到服务器存储邮件的位置

9.收到邮件并返回到客户端

    这样就实现了邮件的接收和发送。


    我们在网站上注册账号的时候,一般都会收到一封激活邮件,在邮箱里点击激活链接后才能登录到网站上。所以发送激活邮件的大体思路是:

    首先向用户邮箱中发送激活邮件,邮件内容为激活账号的连接,链接内容包括发送邮件的IP和激活码。

    接下来就是用户激活:在邮件中点击激活链接,后台则根据传递的激活码进行用户查询,如果激活码不为空,则修改用户状态,即可以登录网站。

代码实现

首先引入jar包:mail.jar和activation.jar

发送邮件的方法

/**
	 * 发送邮件的方法
	 * @param to:收件人
	 * @param code:激活码
	 * @throws MessagingException 
	 * @throws AddressException 
	 */
	public static void sendMail(String to,String code) throws AddressException, MessagingException{
		/**
		 * 1.获得一个Session对象
		 * 2.创建一个代表邮件的对象 Message
		 * 3.发送邮件 Transport
		 */
		//1.获得连接对象
		Properties props = new Properties();
		props.setProperty("mail.host", "localhost");
		Session session = Session.getInstance(props, new Authenticator(){

			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// TODO Auto-generated method stub
				return new PasswordAuthentication("service@shop.com","111");
			}
			
		});
		//2.创建邮件对象
		Message message = new MimeMessage(session);
		try{
			//设置发件人
			message.setFrom(new InternetAddress("service@shop.com"));
			//设置收件人
			message.addRecipient(RecipientType.TO, new InternetAddress(to));
			// 抄送 CC 暗送 BCC
			
			//设置邮件主题
			message.setSubject("来自TGB官方商城激活邮件");
			//设置邮件正文
			message.setContent("<h1>TGB官方商城激活邮件!点下面连接完成激活操作</h1><h3><a href='http://192.168.21.170:8080/shop/user_active.action?code="+code+"'>http://192.168.21.170:8080/shop/user_active.action?code="+code+"</a></h3>","text/html;charset=UTF-8");
		
			//3.发送邮件
			Transport.send(message);
		}catch(AddressException e){
			e.printStackTrace();
		}catch(MessagingException e){
			e.printStackTrace();
		}
				
	}

        //调用sendMail,发送邮件
	public static void main(String[] args){
		try {
			sendMail("aaa@shop.com","11111111");
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

收到的邮件效果

发送激活邮件「建议收藏」

用户激活

Action中用户激活的方法

       <span style="font-size:18px;"> /**
	 * 用户激活的方法
	 * @return
	 */
	public String active(){
		//根据激活码查询用户
		User existUser = userService.fineByCode(user.getCode());
		//判断
		if(existUser == null){
			//激活码错误
			this.addActionMessage("激活失败:激活码错误!");					
		}else{
			//激活成功
			//修改用户的状态
			existUser.setState(1);
			existUser.setCode(null);
			userService.update(existUser);
			this.addActionMessage("激活成功,请去登录!");
		}
		return "msg";
	}</span>

Service中的方法

<span style="font-size:18px;">        //业务层根据激活码查询用户
	public User fineByCode(String code) {
		return userDao.findByCode(code);
	}

	//修改用户状态的方法
	public void update(User existUser) {
		userDao.update(existUser);
	}</span>

Dao中的方法

<span style="font-size:18px;">        //根据激活码查询用户
	public User findByCode(String code) {
		String hql = "from User where code = ?";
		List<User> list = this.getHibernateTemplate().find(hql,code);
		if(list != null && list.size()>0){			
			return list.get(0);		
		}
		return null;
	}

	//修改用户状态
	public void update(User existUser) {
		this.getHibernateTemplate().update(existUser);
		
	}</span>

          这样我们就实现了发送激活邮件并激活的功能,理清思路再去做就OK了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105729.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • git如何移除某文件的版本控制

    git如何移除某文件的版本控制

    2021年10月20日
    63
  • 激活成功教程版补丁_PyCharm永久激活2021

    激活成功教程版补丁_PyCharm永久激活2021参考https://www.cnblogs.com/pupilheart/p/9734124.html实测可行。——————————————————————————————————2019年01月15日更新最新测试该,博客的激活成功教程文件JetbrainsIdesCrack-3.1-release-sha1.jar,最后激活步骤显示keyisinvalid,测试了几个网站激活码发现均…

    2022年8月27日
    6
  • table如何设置边框4*16_html设置表格边框

    table如何设置边框4*16_html设置表格边框1.通过table标签的属性来设置,border=”1″边框设置为1,cellspacing=”0″单元格间距设置为0.2.通过css样式设置,而且用css可以自动设置边框的粗细、颜色等。

    2022年9月19日
    2
  • eigen库的优缺点_简单介绍一种你在家中使用过的工具

    eigen库的优缺点_简单介绍一种你在家中使用过的工具#include”mainwindow.h”#include<QApplication>#include”eigen3/Eigen/Core”#include”eigen3/Eigen/Dense”#include<cmath>#include<iostream>intmain(intargc,char*argv[]){QApplicationa(argc,argv);floatvalue=4.0;

    2022年10月19日
    4
  • 什么是Linux内核版本_linux内核深度解析

    什么是Linux内核版本_linux内核深度解析Linux内核版本有两种:稳定版和开发版,Linux内核版本号由3个数字组成:r.x.yr:目前发布的内核主版本。x:偶数表示稳定版本;奇数表示开发中版本。y:错误修补的次数。内核版本号每位都代表什么?以版本号为例:2.6.9-5.ELsmp,r:2,主版本号x:6,次版本号,表示稳定版本y:9,修订版本号,表示修改的次数头两个数字合在一齐可以描述内核系列。如…

    2022年8月23日
    5
  • windows7下预览psd

    windows7下预览psdPhotoshopcs5安装完后电脑里PSD格式的文件无法显示缩略图,想看原图必须打开软件才能知道图片的内容,安装此补丁之后不用打开软件,在文件夹里就可以看到PSD格式图片的内容,挺方便的,本人亲自测试可以在win7下使用。使用方法:将"psicon.dll"文件拷备到系统system32目录下,不然的话重启之后又看不到缩略图了。步骤一:解压到任何文件夹;步骤二:将psicon.dll拷备到…

    2022年6月11日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号