`

(转)用户注册后,通过网站发送到邮箱中的激活链接激活用户 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);
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

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

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

    在Java编程语言中,发送邮件是一项常见的功能,尤其在用户注册、系统通知或者忘记密码等场景下。本教程将深入讲解如何使用Java实现发送邮件,包括支持多种邮箱服务,并通过激活码来激活用户账户。 首先,JavaMail ...

    Java实现邮箱激活账号

    这个API是Java中用于处理邮件的一套库,它允许开发者发送、接收和操作电子邮件。在实现邮箱激活功能时,我们主要用到的是发送邮件的部分。通过配置SMTP服务器的信息,如主机地址、端口号、用户名和密码,我们可以...

    注册邮箱激活验证Demo

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

    java邮箱和手机发送链接和验证码

    通过设定定时任务,可以在特定时间间隔内自动发送邮件或验证码,如用户注册后的30分钟内未验证则发送提醒。 4. **Cookie管理**:Cookie是一种小型数据块,存储在用户的浏览器中,常用于保持会话状态或存储用户偏好...

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

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

    java 实现邮箱注册与激活

    在用户提交注册表单后,使用Java的JDBC API将数据插入到`users`表中,并生成激活码: ```java public void registerUser(String username, String password, String email) { String activationCode = ...

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

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

    web java邮箱激活代码

    在Web开发中,Java邮箱激活代码是用于验证用户注册邮箱的一种常见方法,它增强了网站的安全性和用户体验。这个压缩包文件可能包含了一个完整的Java项目或库,用于实现这种功能。下面,我们将深入探讨Java邮箱激活...

    JavaMail - 注册邮箱激活源码

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

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

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

    Java 注册时发送激活邮件和激活的实现示例

    Java 注册时发送激活邮件和激活的实现示例是指在用户注册时,系统自动发送激活邮件到用户邮箱,并在用户点击激活链接后,系统验证激活码是否正确,以确保用户的邮箱地址正确并且激活成功。本文将详细介绍 Java 注册...

    Java邮箱注册

    5. 系统将用户状态更改为已激活并通知用户注册成功 四、编辑 reg.jsp 在 reg.jsp 文件中,我们需要编写 HTML 代码以便用户填写注册信息。以下是一个简单的示例代码: ```jsp &lt;%@ page language="java" ...

    ssm注册邮件激活

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

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

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

    SSM+maven+邮箱激活账号

    1. 用户注册:用户填写邮箱地址并提交,服务器端接收到请求后,生成一个唯一的激活码,并将其与用户邮箱关联存储。 2. 发送激活邮件:服务器使用SMTP协议通过邮件服务发送一封包含激活链接的邮件,激活链接内携带...

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

    在本文中,我们将深入探讨如何使用Vue.js前端框架与SpringBoot后端框架相结合,实现一个用户注册并发送邮件激活的功能。Vue.js是一个轻量级、高性能的JavaScript框架,适合构建用户界面;而SpringBoot是Java领域的一...

    注册后自动发送邮件,通过链接进行验证

    在IT行业中,用户注册安全是网站或应用设计的重要一环,而"注册后自动发送邮件,通过链接进行验证"是一种常见的验证用户身份的方法。这种方法被称为邮箱验证或邮件确认,其目的是确保用户提供的电子邮件地址有效,...

    javaWeb激活邮箱验证资料

    Java中,我们常使用JavaMail API来实现SMTP发送邮件的功能。 2. **JavaMail API**:JavaMail API是Java平台上的一个开源库,它提供了一组接口和类用于创建、发送和接收邮件。在JavaWeb项目中,我们可以通过...

Global site tag (gtag.js) - Google Analytics