spring应用开发之javamail定时邮件发送
这篇博文分享一下在spring应用中如何开发定时邮件发送模块,本博文采用的是javamail。当然啦,spring应用与 定时邮件推送 这两者之间其实并没有必要的关联关系。即spring应用归spring应用,而javamail邮件推送也是可以独立存在的。只不过这里加了两个字“定时”是借助spring quartz来实现的(当然啦,定时 也不一定非得用spring quartz 来实现,只是业界都用这个,所以就分享这个了!),既然是这样,那么分享之前,最好你的应用具有spring quartz以及javamail等相关的jar包:这个就自行下载了!(其实,我之前的博客也分享了好多这样的jar包的。如果有相关问题,可以加入后面提供的群进行讨论!)。
好了,开始吧。正如上面所说的,首先我们需要分出模块:1、定时 2、邮件推送。定时的实现采用spring quartz来实现,邮件推送采用javamail来实现。
定时的配置是配置在spring的配置文件的,一般在应用的web.xml中会进行加载,你只需要将下面的配置语句配置进去即可。
如上面所写的,我配置了一个任务调度,用于在凌晨4点,定时清理temporary目录的临时文件(放在本篇博文的话,就是定时发送邮件了) 。下面分析一下这个定时的配置。
根据这个思维导图,配合上面的配置文件,你就大概知晓了:后面,如果想配置多个定时器(其实即为触发器啦),也是按照这个思路来的(配置多个触发器list嘛。。。)
下面,就介绍一下这个定时器的业务逻辑吧:发送邮件。这里采用的是javamail,关于javamail的应用,其实前面我的应用也有介绍过,是一抹一眼的。采用的是qq邮箱作为主发件人,当然啦,需要开通qq邮箱的smtp/pop3协议支持,至于如何开通,可以看我前面这篇:javamail邮件工具类开发。
下面就直接贴该工具类的代码吧:
package org.dsj.core.server.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
public class JavaMailUtil{
/**
* author: steadyjack
* date: 2017年4月5日 下午11:34:13
* description: 发送邮件工具类:通过qq邮件发送,因为具有ssl加密,采用的是smtp协议
* @param mailServer 邮件服务器的主机名:如 "smtp.qq.com"
* @param loginAccount 登录邮箱的账号:如 "[email protected]"
* @param loginAuthCode 登录qq邮箱时候需要的授权码:可以进入qq邮箱,账号设置那里"生成授权码"
* @param sender 发件人
* @param recipients 收件人:支持群发
* @param emailSubject 邮件的主题
* @param emailContent 邮件的内容
* @param emailContentType 邮件内容的类型,支持纯文本:"text/plain;charset=utf-8";,带有Html格式的内容:"text/html;charset=utf-8"
* @return
*/
public static int sendEmail(final String mailServer,final String loginAccount,final String loginAuthCode,String sender,String[] recipients,
String emailSubject,String emailContent,String emailContentType){
int res=0;
try {
//跟smtp服务器建立一个连接
Properties p = new Properties();
//设置邮件服务器主机名
p.setProperty("mail.host",mailServer);
//发送服务器需要身份验证,要采用指定用户名密码的方式去认证
p.setProperty("mail.smtp.auth", "true");
//发送邮件协议名称
p.setProperty("mail.transport.protocol", "smtp");
//开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
p.put("mail.smtp.ssl.enable", "true");
p.put("mail.smtp.ssl.socketFactory", sf);
// 创建session
Session session = Session.getDefaultInstance(p, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
//用户名可以用QQ账号也可以用邮箱的别名:第一个参数为邮箱账号,第二个为授权码
PasswordAuthentication pa = new PasswordAuthentication(loginAccount,loginAuthCode);
return pa;
}
});
//设置打开调试状态
session.setDebug(false);
//可以发送几封邮件:可以在这里 for循环多次
//声明一个Message对象(代表一封邮件),从session中创建
MimeMessage msg = new MimeMessage(session);
//邮件信息封装
//1发件人
msg.setFrom(new InternetAddress(sender));
//2收件人:可以多个
//一个的收件人
//msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
InternetAddress[] receptientsEmail=new InternetAddress[recipients.length];
for(int i=0;i
具体可以结合我给的那篇javamai邮件工具类博客来实现。相关注释我已经贴出来了,如有相关问题可以加入群讨论:583522159(java开源技术交流群) 个人QQ:1948831260