`
daichangfu
  • 浏览: 260152 次
  • 性别: 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技术实现注册用户通过邮箱激活认证激活注册用户

    java实现注册时发送激活邮件+激活

    此Demo通过java实现了用户注册时,向用户邮箱发送激活链接,并且用户点击激活链接之后激活用户的状态。

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

    Java Web实现邮箱注册用户

    PHP激活用户注册验证邮箱

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

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

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

    演示账号激活的过程:注册-&gt;向指定邮箱发送邮件-&gt;用户登录邮箱,激活账号

    本工程用于演示账号激活的过程:注册——&gt;向指定邮箱发送邮件——&gt;用户登录邮箱,激活账号 本工程编码方式:UTF-8 须执行的sql语句: create database `test`; create table `user` ( `id` char(36) not null ...

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

    如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功能。

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

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

    ASP.NET注册登录发送邮箱验证功能源码

    邮件发送功能,主要实现了用户注册邮箱验证,成功后发邮件到注册邮箱中去,然后可以去点击连接进行激活,不激活不能进行登录,会提示未激活账号,如果忘记密码可以通过邮箱或者用户名去找回密码发邮件到注册的邮箱,...

    Springboot+Mybatis-plus实现邮箱验证注册

    这样在注册的时候发送一封邮件,把这个邮件码以html的格式发送到注册邮箱,然后通过点击链接,把邮件码在提交到后台进行对比,如果邮件中的邮件码跟发送时设置的一样,就把用户状态改为1激活,然后登陆即可。

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

    Java Web实现的注册用户,通过邮箱激活。有完整的jar包,含有数据库的文件,导入后可直接运行(数据库的用户名和密码需修改)

    PHP实现的激活用户注册验证邮箱功能示例

    注册邮箱激活流程 1、用户注册 2、插入用户数据,此时帐号未激活状态。 3、将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。 4、将构造好的激活识别码组成URL发送到用户提交的邮箱。 5、用户...

    注册邮箱验证

    注册的邮箱验证 用于发送激活码和激活链接 用户点击激活链接实现激活 可在数据库字段中设置状态 实现激活

    node使用邮箱注册,打造登陆系统

    本文主要是关于邮箱登陆的相关案例,通俗的说就是用户使用邮箱...当用户激活后可以正常使用相关的功能,没激活,当登陆时会提示没激活,是否需要在发送一条邮件激活,使用工具: node v8.5.0 mongodb ioredis postman

    Emlog用户注册插件

    Emlog用户注册插件 用户注册插件,用户注册发送激活邮件,通过邮箱点击链接激活 插件注册页面:http://你的域名/?plugin=register

    .NET邮件发送以及找回密码功能

    主要实现了用户注册邮箱验证,成功后发邮件到注册邮箱中去,然后可以去点击连接进行激活,不激活不能进行登录,会提示未激活账号,如果忘记密码可以通过邮箱或者用户名去找回密码发邮件到注册的邮箱,可以重新设置...

    php注册时自动发送给用户邮箱

    很好用的,希望对php学习者有所帮助。 主要是在做用户注册时对用户申请帐号的激活。

    邮箱激活验证

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

    批量邮箱注册助手

    因为现在服务器对注册邮箱的IP进行限制,所以你用同一个IP注册了十几个邮箱后,服务器就会暂停该IP的注册,间隔一段时间后才让你再次注册。当服务器限制你的IP后,你可以采用以下方法进行处理: 1) 如果你是ADSL...

    Django如何实现网站注册用户邮箱验证功能

    也就是说,用户在注册后填写正确的电子邮件地址,接着网站会发送一封启用电子邮件到用户设置的电子邮件的邮箱中,并在邮件中提供一个激活或启用的链接,在用户单击此链接后,账号正式激活或启用。 这里我们使用 ...

Global site tag (gtag.js) - Google Analytics