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等依赖--> |
<?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> |
#email 这里输入的是新浪邮箱,需要开启对应smtp。 [email protected] mail.host=smtp.sina.com mail.port=25 mail.username=XXXXXXX mail.password=XXXXXX mail.smtp.auth=true |
@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); } |
可以看到在发送邮箱模板中添加了**邮箱的链接,在请求的路径后面添加了userId即用户账号的加密(可逆)参数。通过post请求更改对应业务用户状态即可完成个人邮箱**并完成绑定。