注册时你填写了一正确 的信息后,将激活信息 自动发邮件到你的邮箱中。在用过发送发哦邮箱中的激活链接激活用户。
大概步骤如此:
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);
}
分享到:
相关推荐
此Demo通过java实现了用户注册时,向用户邮箱发送激活链接,并且用户点击激活链接之后激活用户的状态。
Java Web实现邮箱注册用户
Java Web实现的注册用户,通过邮箱激活。有完整的jar包,含有数据库的文件,导入后可直接运行(数据库的用户名和密码需修改)
getDigitalSignature方法:返回用户信息中的邮件验证密钥,用于和邮件链接中的密钥做比对。 sendRestPwdEmail方法:发送重置密码邮件。用户注册激活邮件流程基本类似,有兴趣的朋友可以自己尝试写一个激活方法。
注册的邮箱验证 用于发送激活码和激活链接 用户点击激活链接实现激活 可在数据库字段中设置状态 实现激活
Java Web程序设计入门
在校验通过后即可完成注册,在后台同样需要进行数据校验及发送一封激活邮件。 3)用户的激活:已经注册的用户,需要进入邮箱点击激活链接进行用户的激活。 4)用户的登录:已经注册的用户,并且该用户已经激活的情况...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
用户注册,通过邮箱激活账号 程序下载: 程序简要说明: 用户注册页面,填写基本信息包括用户名密码邮箱等,点击注册向用户邮箱发送激活邮件,点击邮件中的链接实现激活账号。 具体实现: 用户注册时向数据库中写入...
主要介绍了java web激活邮箱并找回密码,在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,感兴趣的小伙伴们
Spring Mail + Spring Task完成异步发送激活链接,邮件发送,验证;Druid(监控目的的数据库连接池),配置文件里面加密数据库密码;Freemarker:基于Java的生成html的模板引擎,用来前后端交互等等。 项目功能目标 ...
在校验通过后即可完成注册,在后台同样需要进行数据校验及发送一封激活邮件。 用户的激活:已经注册的用户,需要进入邮箱点击激活链接进行用户的激活。 用户的登录:已经注册的用户,并且该用户已经激活的情况下,...
人工智能-项目实践-信息管理系统
主要为大家详细介绍了javamail实现注册激活邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
该系统的具体任务就是设计一个网路实时聊天系统,该系统的具体功能有: 注册:注册用户,在数据库中添加用户的用户名、密码、性别和邮箱等。...用户管理:管理员的一项独特功能,可以激活和注销用户。
这是java小项目,其中包含登录,注册,邮箱激活,商品的展示,购物车和订单订单的查询和付款,以及后台的商品管理,用户管理,分类管理,订单管理