Java mail 实现业务邮件发送

         针对业务中使用邮件的场景有很多,比如邮箱认证,邮箱注册或者激活、某些业务通过邮件提示等。而java自身也针对电子邮件协议封装了java类库,即javaMail。在spring占领半边天的后端开发中,spring 家族也对javaMail有一个完美整合。本文就主要简单介绍一下spring 整合JavaMail并针对网站中经常使用的邮箱认证示例.

1、引入所需要的jar

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
 <version>1.4.4</version>
 </dependency>
<!---spring core、bean等依赖-->
2、spring整合javaMail,将JavaMailSenderImpl纳入spring容器管理。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans.xsd    
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context.xsd  ">

<bean id="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}" />
<property name="port" value="${mail.port}" />
<property name="username" value="${mail.username}" />
<property name="password" value="${mail.password}" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="defaultEncoding" value="UTF-8" />
</bean>

<!-- 加载properties -->
<context:property-placeholder location="classpath*:config/config.properties"/>

</beans>
     config.properties文件内容:

#email  这里输入的是新浪邮箱,需要开启对应smtp。
mail.default.from=XXXXX@sina.com
mail.host=smtp.sina.com
mail.port=25
mail.username=XXXXXXX
mail.password=XXXXXX
mail.smtp.auth=true
3、编写一个邮件发送的处理工具,比如本案例编写一个发送文本型的邮件处理并定义发送邮件的模板。

@Controller
@RequestMapping("/emailAuth")
public class EmailAuthController {
@Autowired
private JavaMailSender mailSender;

@RequestMapping(value="/auth", method = RequestMethod.POST)
public void authEmail(HttpServletRequest request,HttpServletResponse response) {
String username = request.getParameter("username");
String email = request.getParameter("email");
String userid = request.getParameter("userId");

String enc = SecretUtil.encrypt(userid);  //用户账户加密
String emailContext = EmailUtils.getMailCapacity(email, enc, username); //设置邮件模板
sendTextEmail(title,emailContext,email);
//绑定用户、激活处理 TODO
}

}
    用户模板处理:

public static String getMailCapacity(String email,String enc,String username){

try {
if(!(StringUtils.isEmpty(email.trim()) && StringUtils.isEmpty(enc.trim()) && StringUtils.isEmpty(username.trim()))){
StringBuffer sb = new StringBuffer();
sb.append("亲爱的P粉"+username+",您好!");
sb.append("<br>");
sb.append("</br>");
sb.append("感谢您注册,您登录的邮箱帐号为  "+email);
sb.append("<br>");
sb.append("</br>");
sb.append("请点击下面的链接即可完成激活。");
sb.append("<br>");
sb.append("</br>");
String url = getUrl("home.url");
sb.append("<a href=\""+url+enc); //服务器路径 
sb.append("\">");
sb.append(url+enc);// 服务器路径
sb.append("</a>");
System.out.println(sb.toString());
return sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
   发送处理逻辑:

/**
* 发送文本型邮件
* @param title
* @param context
* @param desEmail
*/
public void sendTextEmail (String title,String context,String desEmail) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimHelper = new MimeMessageHelper(mimeMessage);
try {
mimHelper.setFrom(from);
mimHelper.setSubject(title);
//mimHelper.setSentDate(sentDate);
mimHelper.setTo(desEmail);
mimHelper.setText(context, true);  //true 表示内容有HTML代码可以解析

} catch (MessagingException e) {
e.printStackTrace();
}

mailSender.send(mimeMessage);
}
4、前段邮箱发送,业务中录入要发送的邮箱,本案例测试:3242535252@qq.com,收到邮件内容为:


     可以看到在发送邮箱模板中添加了激活邮箱的链接,在请求的路径后面添加了userId即用户账号的加密(可逆)参数。通过post请求更改对应业务用户状态即可完成个人邮箱激活并完成绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值