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

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

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

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

邮件发送的原理

基本概念

邮件服务器:跟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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是螺旋式上升理论_否定之否定螺旋式上升

    什么是螺旋式上升理论_否定之否定螺旋式上升![](https://upload-images.jianshu.io/upload_images/10892560-417ca4f86b6b5b02.png)1.这个世界没有任何一条线是直线2.

    2022年8月5日
    4
  • 清风数学建模学习笔记——层次分析法(AHP)

    清风数学建模学习笔记——层次分析法(AHP)层次分析法  层次分析法(analytichierarchyprocess),简称AHP。是建模比赛中比较基础的模型之一,其主要解决评价类的问题。如选择哪种方案最好,哪位员工表现最好等)。  它是一个较为主观的评价方法,其在赋权得到权重向量的时候,主观因素占比很大。因而在建模比赛中,常常与客观方法得到的权重向量方法进行综合,而得出一个综合的权重向量,进行后续操作。一、模型介绍  …

    2022年9月23日
    0
  • STM8S之STVD问题解决47 can’t openfile crtsi0.sm8「建议收藏」

    STM8S之STVD问题解决47 can’t openfile crtsi0.sm8「建议收藏」用STVD+COSMIC编译工程时出现以下错误(加载的别人的工程):#errorclnkDebug\demo.lkf:47can’topenfilecrtsi0.sm8#errorclnkDebug\demo.lkf:60can’topenfilelibis0.sm8#errorclnkDebug\demo.lkf:61can’topenfilelibm0.sm…

    2022年9月23日
    0
  • SpringBoot面试题大汇总附答案,SpringBoot面试题-持续更新中「建议收藏」

    SpringBoot面试题大汇总附答案,SpringBoot面试题-持续更新中「建议收藏」2021最新SpringBoot面试题【附答案解析】SpringBoot面试题及答案2021,SpringBoot2021最新面试题及答案,SpringBoot面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~SpringBoot最新面试题大汇总,附答案其实,博主还整理了,更多大厂面试题,直接下载吧下载链接:高清172份,累计7701页大厂面试题PDF1、SpringBoo

    2022年6月7日
    46
  • PHP实现拼车平台数据表

    PHP实现拼车平台数据表

    2022年2月18日
    41
  • 电商接口测试用例_连连电商跨境

    电商接口测试用例_连连电商跨境按照两种模式进行划分总结:1.按照测试类型2.按照电子商务网站的系统架构1.按照测试类型来划分1.兼容性1.1主要是在浏览器兼容(360浏览器IE6IE8浏览器)12.操作系统,主要体现在操作系统兼容(xpwin2003win2007)2.UI测试2.1检查连接是否正确2.2是否有文字错误信息2.2产品价格是否有显示错误。3.用户体验测试UE3.1首页产品的展示与分类3.2搜索结果页,搜索…

    2022年9月28日
    0

发表回复

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

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