电子商务网站使用
Spring 发送激活账号的电子邮件
一、 前面的准备工作
1:邮箱服务器的设置:
我使用的是QQ邮箱服务器来实现的,下面的操作就以QQ邮箱服务器为例。如果你的QQ邮箱还未开通pop3和smtp服务的话,你需要按照下面的操作来开通服务:
第一步:
第二步:
2: 引入相应的jar文件
在我们的B2C电子商务网站中,在lib下出除了之前我们引入的spring jar文件之外,我们还需要两个jar文件,分别是:
activation.jar
mail.jar
二:具体的实现
1、在dao层新建一个SenderMailDao接口
//括号里面的参数是会员的一个实体
public void sendMail(Customers entity);
public interface SenderMailDao {
//给会员发送email的方法
public void sendMail(Customers entity);
}
2、接下来就是这个接口的实现类:SenderMailDaoImpl
public class SenderMailDaoImpl implements SenderMailDao {
private JavaMailSenderImpl mailSender;//这个类中封装了邮箱服务器的一些配置,包括host,用户名,密码等 下面在配置文件中会有详细的说明
public void setMailSender(JavaMailSenderImpl mailSender) {
this.mailSender = mailSender;
}//通过set方法注入
public void sendMail(Customers entity) {
//通过MailSender创建一个邮件
MimeMessage message=mailSender.createMimeMessage();
try {
//这里的MimeMessageHelper是用来封装邮件的一些基本信息
MimeMessageHelper helper=new MimeMessageHelper(message,true,"UTF-8");
helper.setFrom("xxx@qq.com");//发件人的地址
helper.setTo(entity.getEmail());//收件人的地址
helper.setSubject("账户激活邮件");//邮件的主题
MimeBodyPart body=new MimeBodyPart();//邮件体
body.setContent("<a href='http://localhost:8888/Ebusiness/zb/cus_activation.action?cus.lname="+entity.getLname()+"&cus.status=1'>尊敬的 "+entity.getName()+" 用户,您好!!欢迎您使用我们的电子商务网站!!" +
" 请点击激活您的账户</a>","text/html;charset=UTF-8");//这个邮件体是一个超链接,是用来设置会员的状态的;(补充:在我们的数据库中的会员表中应该添加一个会员账号激活状态的字段,我的表中叫“Status“)
MimeMultipart mp=new MimeMultipart();
mp.addBodyPart(body);
message.setContent(mp);
mailSender.send(message);//发送邮件
} catch (MessagingException e) {
System.out.println("发送失败。。。。。");
e.printStackTrace();
}
}
}
3、 在我们的Service层新建一个SenderMailService接口,同时这个接口继承dao层的接口
public interface SenderMailService extends SenderMailDao {
}
4、然后就是新建一个实现service层的接口的实现类SenderMailServiceImpl
public class SenderMailServiceImpl implements SenderMailService {
private SenderMailDaoImpl senderMailDaoImpl;//真正的业务实现类
private TaskExecutor taskExecutor;//异步线程执行器 在文档的最后有说明
public void setSenderMailDaoImpl(SenderMailDaoImpl senderMailDaoImpl) {
this.senderMailDaoImpl = senderMailDaoImpl;
}
public void setTaskExecutor(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
//分别用set方法注入
//下面是关键部分,为了将会员的注册和发送邮件不在一个线程下执行我们需要将发送邮件的操作另开启一个线程去完成,这样一来会员的注册就不会因为发送邮件而发生等待的过程。
public void sendMail(final Customers entity) {
taskExecutor.execute(new Runnable() {
public void run() {
senderMailDaoImpl.sendMail(entity);
}
});
}
}
5、 配置文件的相关配置
首先是dao层的配置,这里我们需要配置我们真正的和业务实现bean以及JavaMailSenderImpl这个邮箱服务器的配置
<!—真正的业务实现类--> <bean id="senderMailDaoImpl" class="cn.hbsi.zhangbao.dao.SenderMailDaoImpl" scope="singleton"> <property name="mailSender" ref="mailSender"/> </bean> <!-- 邮箱服务器配置 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <!--邮箱服务器的主机地址 --> <property name="host" value="smtp.qq.com"/> <!--默认的编码方式 --> <property name="defaultEncoding" value="UTF-8"/> <!--服务器的端口号 --> <property name="port" value="25"/> <!—连接服务器的用户名 也就是你的QQ邮箱的地址名例如xxx@qq.com--> <property name="username" value="XXX"/> <!—密码 就是你登陆邮箱的密码 --> <property name="password" value="XXX"/> <!—下面就是smtp的一些设置--> <property name="javaMailProperties"> <props> <!—设置自动登录--> <prop key="mail.smtp.auth">true</prop> <!—设置端口的进入优先命令状态--> <prop key="mail.smtp.starttls.enable">true</prop> </props> </property> </bean>
6、接下来是service层的配置
在这里我们需要对我们service层的业务实现类进行配置,以及异步执行器的配置
<!—service层的业务实现类 --> <bean id="senderMailServiceImpl" class="cn.hbsi.zhangbao.service.SenderMailServiceImpl" scope="singleton"> <!—为真正的业务实现类 进行注入--> <property name="senderMailDaoImpl" ref="senderMailDaoImpl"/> <!—为异步线程执行器 进注入 --> <property name="taskExecutor" ref="taskExecutor"/> </bean> <!—配置异步线程执行器 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!—设置核心池子的大小 --> <property name="corePoolSize" value="10"/> <!—设置最大池子的大小 --> <property name="maxPoolSize" value="30"/> </bean>
7、最后就是action的配置
在会员的action中我们要引入service层的业务接口(由于代理都是面向接口的编程)
public class CustomerAction extends ActionSupport {
private SenderMailService senderMailServiceImpl;
public void setSenderMailServiceImpl(SenderMailService senderMailServiceImpl) {
this.senderMailServiceImpl = senderMailServiceImpl;
}//set方法注入
//接下来就是会员注册的方法:
//会员注册
public String reg(){
boolean flag=false;
flag=customerServiceImpl.insert(cus);
if(flag){
//注册完成后自动发送激活邮件
senderMailServiceImpl.sendMail(cus);
}
return "toLogin";
}
}
下面我们要对这个action进行必要的配置:代码如下
<bean id="springCustomerAction" class="cn.hbsi.zhangbao.action.CustomerAction" scope="prototype">
<property name="customerServiceImpl" ref="customerServiceImpl"/>
<!—注入发送邮件的service层的实现类 -->
<property name="senderMailServiceImpl" ref="senderMailServiceImpl"/>
<property name="pagination" ref="pagination"/>
</bean>