spring应用开发之javamail定时邮件发送

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目录的临时文件(放在本篇博文的话,就是定时发送邮件了)  。下面分析一下这个定时的配置。

 

    spring应用开发之javamail定时邮件发送_第1张图片

    根据这个思维导图,配合上面的配置文件,你就大概知晓了:后面,如果想配置多个定时器(其实即为触发器啦),也是按照这个思路来的(配置多个触发器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

 

你可能感兴趣的:(开发工具与插件)