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

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

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

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

邮件发送的原理

基本概念

邮件服务器:跟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)
blank

相关推荐

  • java绝对值方法(java计算绝对值的方法)

    **文章摘要**1、绝对值函数,用来获取表达式的绝对值。2、绝对值函数,实现降序+升序输出。一、绝对值函数使用说明绝对值函数是JDK中Math.java中的实现方法,其用来得到表达式的绝对值。其实现非常简单,源码如下:/***Returnstheabsolutevalueofan{@codeint}value.*Iftheargumentisnotnegative…

  • YUI3 Overlay的使用「建议收藏」

    YUI3 Overlay的使用「建议收藏」YUI3的Overlay为我们提供了一个创建叠加层的方便的方(从名字就可以看出来),他扩展自Widget类。目前的版本,仅支持简单的页面XY定位、相对于一个Node或者viewport对其或居中。下面来体验一下Overlay。最简单的引用YUI3的方法自然是引用Yahoo服务器上的种子文件,地址如下:&lt;scriptsrc="http://yui.yahooapis.com/3…

  • a was not declared_zeroifnull

    a was not declared_zeroifnull[size=medium]ibatis:isNotEmpty:过滤空串""和空nullisNotNull:只过滤空nullphp:isset:过滤null和未定义isEmpty:过滤false、空串""、nullExp SELECTLPM.WORK_TYPE"workType", LPM.DE…

  • JavaScript ES6 Arrow Functions(箭头函数)

    JavaScript ES6 Arrow Functions(箭头函数)

  • Redis 6379端口无法telnet登陆

    Redis 6379端口无法telnet登陆一、现象:Redis所在服务器无法telnet 二、问题原因  redis-server默认开放的127.0.0.1IP地址需要修改为0.0.0.0才可以被其他机器访问三、解决办法(Windows)  1,在Redis安装目录下找到配置文件 redis.windows.config  2,修改bind127.0.0.1改为bind0.0.0.0    3,重启Redis…

  • oracle删除锁表_oracle清理数据文件

    oracle删除锁表_oracle清理数据文件查看Oracle数据库被锁住的表,删除锁表的进程–1.查看被锁住的表SELECTdob.object_nametable_name,lo.locked_mode,lo.session_id,vss.serial#,vss.actionaction,vss.osuserosuser,vss.logon_time,vss.processap_pid,

发表回复

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

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