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

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

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

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

邮件发送的原理

基本概念

邮件服务器:跟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了。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • hadoop是什么意思_hadoop三大组件

    hadoop是什么意思_hadoop三大组件Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。[1]Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthro

  • 软件激活成功教程教程2[通俗易懂]

    软件激活成功教程教程2[通俗易懂]第四章–调试器及相关工具入门在写这章之前,我看了一下看雪以往的教程。本来想参考一下,可忽然发现,写这样的一章,是一件非常愚蠢的事情,因为我觉的关于这些工具的使用教程。看雪教程中已经写的够详细的了,我并不认为你会看不懂。所以我不想做浪费时间的人,本章就此搁浅。推荐看《CrackTutorial2001》,推荐看《看雪论坛精华一、二、三、四》,推荐看《加密与解密--软件保护技术及完全解决方案》,

  • allure安装配置「建议收藏」

    allure安装配置「建议收藏」一、下载allurehttps://dl.bintray.com/qameta/generic/io/qameta/allure/allure/2.7.0/allure-2.7.0.zip二、检查本机是否有java的运行环境1、win+r输入cmd回车打开终端窗口打开效果入下2、输入java回车安装成功效果如下:安装未成功效果如下:3、输入javac回车…

  • 数据库之多表联合查询

    数据库之多表联合查询一、知识点名称多表联合查询(一对多数据显示、多对多数据展示)二、知识点业务场景一对多关联:学生和成绩的关系用户与订单的关系企业与员工的关系用户与银行卡的关系多对多关联:学生和选课的关系订单和商品的关系用…

  • UML的9种常用图与建模工具详解「建议收藏」

    UML的9种常用图与建模工具详解「建议收藏」UML即UnifiedModelLanguage,是一种建模语言,也是标准建模语言。在软件开发中,当系统规模比较复杂时,需要用图形抽象地来表达复杂的概念,让整个软件设计更具有可读性,可理解性,以便

  • Python实现排列组合算法

    Python实现排列组合算法实现组合算法C(n,k),可以用递归实现:importcopy#实现list的深复制defcombine(lst,l):result=[]tmp=[0]*llength=len(lst)defnext_num(li=0,ni=0):ifni==l:result.append…

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

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