`
daichangfu
  • 浏览: 264609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)用户注册后,通过网站发送到邮箱中的激活链接激活用户

    博客分类:
  • java
阅读更多
注册时你填写了一正确 的信息后,将激活信息 自动发邮件到你的邮箱中。在用过发送发哦邮箱中的激活链接激活用户。

大概步骤如此:

1.网站用户相关表中有一个字段用来记录用户帐号是否激活。

2.当用户注册时,注册程序会自动向用户注册邮箱发送一封激活邮件,里面带激活链接(参数)。

3.当用户点击激活邮件的激活链接访问激活页面,激活页面根据链接带的参数判断出用户帐号、激活有效期等以决定是否向该用户表中的“是否激活”字段写入“已激活标记”

4.成功写入激活标记,激活成功,可以使用帐号登陆网站。

如有不正确之处还请指点。

这里有个问题:当有大量的用户注册时是采用同步发送还是异步发送邮件?答案当然是采用异步发送! 原因: 同步异步发送问题:JavaMail邮件处理是同步的,即用户触发事件、与SMTP Server通信、服务器返回状态消息、程序结束是单线程内, 这时往往因Socket通信、服务器业务处理速度等原因而使得处理时间是个未知数。举个简单的应用实例:若用户在提交注册的同时发送一封激活账户邮件, 用户有可能不知道是因为邮件服务器那儿阻塞致半天没有反应而以为注册失败并放弃,这将是失败的设计,但异步方式能解决这些问题。异步方式简单地说就是将邮件处理任务交给另外一个线程,J2EE有两种解决方案,一是种利用JMS,JMS可以实现同步和异步的消息处理,将邮件作为一个异步的消息,就可以实现异步邮件发送。JMS属于J2EE的高级应用,所以对于仅以WEB功能的容器还不支持这种服务,例如Tomcat(当然可以找到插件来解决)。另一种方案是利用JDK中Executor的支持,JDK 5.0后继版本增加了java.util.concurrent一个强大的并发工具包,它包含了执行器、计时器、锁、线程安全队列、线程任务框架等等。Executor——执行器,它可以将任务的“提交”与“执行”分离解耦,我们的邮件处理任务完全可以借用它实现异步执行。而Spring框架提供了封装,见②。

现贴出关键性的部分:
<!-- 发送Email配置 -->
 <!--①邮件服务器-->
 <bean id="mailSender"
  class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="protocol" value="smtp" />
  <property name="host" value="smtp.sina.com" />
  <!--<property name="port" value="465" />
  <property name="username" value="xxx@sina.com" />
  <property name="password" value="xxx" />
  <property name="javaMailProperties">
   <props>
    <!-- 使用用户名和密码验证 -->
    <prop key="mail.smtp.auth">true</prop>
    <!--
    <prop key="mail.smtp.starttls.enable">true</prop>
    <prop key="mail.smtp.socketFactory.class">
     javax.net.ssl.SSLSocketFactory
    </prop>gmail要求的ssl连接
     -->
   </props>
  </property>
 </bean>  <!--②异步线程执行器-->
 <bean id="taskExecutor"
  class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <property name="corePoolSize" value="10" />
  <property name="maxPoolSize" value="30" />
 </bean>



这是邮件处理的两个核心配置,第一个配置(①)是往容器中装配一个JavaMailSender Bean,它就是JavaMail的封装,其中最关键的是装配过程的属性参数,这些属性既要严格遵照JavaMail规范,又要满足邮件提供商的要求,例如SMTP服务器端口是多少、发送时是否要身份验证、服务器是否采用安全连接、连接时是否加密以及采用什么样的加密方式,邮件服务商提供的这些参数直接影响到上述的配置。

发送邮件的主要方法:

 public void sendMail(Mail email) throws MessagingException, IOException {
  String tto[] = email.getTo().trim().split(";");
  if (email.getTo() == null || email.getTo().trim().length() == 0) {
   System.out.println("没有收件人!");
   return;
  }
  if (tto.length > 1) {// 收件人大于5封时,采用异步发送
   System.out.println("2222222222222222222");
    ctx = new ClassPathXmlApplicationContext("springapplicationContext.xml");
   
   sendMailByAsynchronousMode(email);
   System.out.println("收件人过多,正在采用异步方式发送...");
  } else {
   System.out.println("333333333333333333");
    ctx = new ClassPathXmlApplicationContext("springapplicationContext.xml");
   
   sendMailBySynchronizationMode(email);
   System.out.println("正在同步方式发送邮件...");
  }
 }

 /**
  * 异步发送
  */

 public void sendMailByAsynchronousMode(final Mail email) {
  try {

   TaskExecutor taskExecutor = (TaskExecutor) ctx
     .getBean("taskExecutor");
   taskExecutor.execute(new Runnable() {
    public void run() {
     try {
      sendMailBySynchronizationMode(email);
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   });
  } catch (RuntimeException e) {
   System.out.println("异步发送邮件出现异常:" + e.getMessage());
  }
 }

 /**
  * 同步发送
  */
 public void sendMailBySynchronizationMode(Mail email)
   throws MessagingException, IOException {
  JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
  MimeMessage mime = sender.createMimeMessage();
  MimeMessageHelper helper = new MimeMessageHelper(mime, true, "utf-8");
  helper.setFrom(email.getFrom());// 发件人
  helper.setReplyTo("xxx@sina.com");// 回复到
  helper.setSubject(email.getSubject());// 邮件主题
  helper.setText(email.getContent(), true);// 邮件内容 true表示设定html格式

  String tto[] = email.getTo().trim().split(";");
  if (tto.length > 0) {
   InternetAddress address[] = new InternetAddress[tto.length];
   for (int i = 0; i < tto.length; i++) {
    address[i] = new InternetAddress(tto[i]);
   }
   if (email.getType() == "CC") {
    helper.setCc(address);
   } else if (email.getType() == "BCC") {
    helper.setBcc(address);
   } else {
    helper.setTo(address);
   }
  }
  sender.send(mime);
 }


原文地址:http://student.csdn.net/space.php?uid=49357&do=blog&id=20431
分享到:
评论
2 楼 yulanlian 2012-08-13  
sorry  没看到那个【转】字
1 楼 yulanlian 2012-08-13  
唉,这个文章我都看了N多变了,您是原创么?

相关推荐

    用户注册邮箱激活ASP.NET实现

    总的来说,使用ASP.NET实现用户注册邮箱激活的过程涉及到前端表单设计、后端数据处理、邮件发送以及URL路由等多个环节。每个环节都需要考虑用户体验和安全性,确保用户数据的完整性和隐私。通过以上步骤,我们可以...

    Java Web实现邮箱注册激活用户

    这个激活码被嵌入到一个链接中,通过SMTP(Simple Mail Transfer Protocol)服务发送到用户提供的邮箱。 3. **邮件内容**:邮件通常包含欢迎信息,以及一个“点击激活”链接。这个链接指向服务器上的一个特定URL,...

    注册邮箱激活验证Demo

    【注册邮箱激活验证Demo】是一个基于JSP/Servlet和JavaMail技术的应用实例,主要用于网站用户注册时的邮箱验证。在互联网应用中,邮箱验证是一种常见的安全机制,它确保用户提供的邮箱地址有效,并防止恶意注册。当...

    PHP用户注册邮箱验证激活帐号

    总结一下,实现“PHP用户注册邮箱验证激活帐号”涉及以下步骤: 1. 创建用户注册表单并处理提交的数据。 2. 使用PHP连接MySQL数据库,安全地存储用户信息。 3. 通过SMTP发送带有激活码的邮件。 4. 实现`active.php`...

    PHP中注册邮箱激活源码

    以下是对"PHP中注册邮箱激活源码"这一主题的详细阐述: 1. **邮箱验证流程**: - 用户在网站上填写注册表单,包括用户名、密码和邮箱地址。 - 服务器接收到数据后,通过PHP发送一封包含激活链接的邮件到用户提供...

    使用邮箱激活用户注册状态.docx

    总结起来,使用邮箱激活用户注册状态是Java Web应用程序中常用的一种安全策略,它通过邮箱验证确保用户的真实性和账户的安全性。在实现这一功能时,需要考虑数据验证、激活码生成、邮件发送、链接解析等多个环节,...

    JavaMail - 注册邮箱激活源码

    在这个“JavaMail - 注册邮箱激活源码”项目中,我们主要关注的是使用JavaMail进行用户注册时的邮箱验证功能。邮箱激活是一种常见的安全措施,用于确认用户提供的邮箱地址有效且属于用户本人。 首先,让我们深入...

    使用邮箱激活用户注册状态共3页.pdf.zip

    标题“使用邮箱激活用户注册状态共3页.pdf.zip”暗示了一份文档,可能详细介绍了如何通过邮箱验证来激活用户的注册状态。这份文档可能分为三个部分,全面地涵盖了该主题。 首先,邮箱激活的主要目的是确认用户的...

    Vue结合SpringBoot注册发送邮件激活.zip

    本项目“Vue结合SpringBoot注册发送邮件激活”旨在实现用户注册时通过电子邮件验证其身份的功能,这在很多网站中是常见的安全措施。下面将详细解释实现这一功能的关键步骤和技术要点。 1. **Vue.js 前端**: - **...

    java实现发送邮件,注册邮件激活账户

    关于账户激活,通常会在用户注册时生成一个唯一的激活码,将其存储在数据库中并与用户的邮箱关联。邮件中包含这个激活码,用户点击链接或输入激活码后,通过服务器验证激活码的有效性,完成账户激活流程。 在实际...

    ASP 实现邮箱激活账号

    在IT行业中,邮箱激活账号是一种常见的用户注册流程,它增强了网站的安全性,防止恶意注册和垃圾信息。在ASP(Active Server Pages)环境下,我们可以利用C#语言来实现这一功能。以下将详细介绍如何通过ASP和C#来...

    Java实现邮箱激活账号

    在实现邮箱激活功能时,我们主要用到的是发送邮件的部分。通过配置SMTP服务器的信息,如主机地址、端口号、用户名和密码,我们可以使用JavaMail创建一个会话,并通过该会话发送带有激活链接的邮件。例如: ```java ...

    PHP激活用户注册验证邮箱

    PHP激活用户注册验证邮箱本文将结合实例介绍如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功能

    注册激活邮箱

    从给定的代码片段来看,这段代码展示了如何使用C#语言和.NET框架实现邮件发送功能,以完成注册后的邮箱激活步骤。下面将逐行解析这段代码的关键部分: #### 邮件构造与编码设置 - 第06行:设置邮件编码为GB2312,以...

    Java Web+Mysql实现邮箱激活注册的用户

    本项目"Java Web+Mysql实现邮箱激活注册的用户"提供了一种安全且有效的用户注册机制,通过邮箱验证确保用户的真实性。下面将详细介绍这个项目的相关知识点。 1. **Java Web基础**: - **Servlet**:Java Web的核心...

    ssm注册邮件激活

    标题“ssm注册邮件激活”指的是使用Spring、SpringMVC和MyBatis(SSM)这一经典的Java web开发框架组合,实现用户注册时通过电子邮件验证激活账号的功能。这个功能是许多网站为了确保用户的真实性以及避免恶意注册而...

    发送邮箱验证回复

    - 发送激活邮件:系统通过SMTP(Simple Mail Transfer Protocol)或其他邮件服务API(如Google的Gmail API或SendGrid)发送一封包含激活链接的邮件到用户的邮箱。 - 激活链接:链接通常包含一个唯一的令牌或ID,与...

    C# 实现用户注册后用邮箱激活登陆程序

    VS2008+SQL2005 C# 实现用户注册后用邮箱激活登陆程序。

    jsp登录并且实现邮箱激活功能

    3. 邮件发送:在用户注册成功后,我们需要使用SMTP协议通过邮件服务发送一封包含激活链接的邮件。激活链接中会包含用户的ID和激活码,例如:`http://yourwebsite.com/activate?userId=123&activationCode=abc123`。...

Global site tag (gtag.js) - Google Analytics