Spring+quartz实现定时发送邮件功能实例

1743 2017-7-6 23:23

本文介绍了Spring+quartz实现定时发送邮件功能实例,非常实用,有兴趣的同学快来看看吧

在ApplicationContext.xml的内容如下:

 

 代码如下复制代码

<beans

 xmlns="http://www.springframework.org/schema/beans"

 xmlns:aop="http://www.springframework.org/schema/aop"

 xmlns:tx="http://www.springframework.org/schema/tx"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:p="http://www.springframework.org/schema/p"

 xsi:schemaLocation="http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

      http://www.springframework.org/schema/aop

       http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

       http://www.springframework.org/schema/tx

       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">

 

  

 

 <beanname="quartzBean"

  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

  

  

  

  

   sendEmail

  

  

   false

  

 

   

  

  

   

   

   

   

    0 0 10 1 * ?

   

  

  

 

  

   

  

 

 

 

 

至于方法如下:

 

 代码如下复制代码

packagecom.zhuyun.net;

 

importjava.io.BufferedWriter;

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.FileWriter;

importjava.io.IOException;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.io.OutputStream;

importjava.io.OutputStreamWriter;

importjava.io.Writer;

importjava.sql.SQLException;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.Calendar;

importjava.util.Date;

importjava.util.List;

importjava.util.Properties;

 

importjavax.activation.DataHandler;

importjavax.activation.DataSource;

importjavax.activation.FileDataSource;

importjavax.mail.BodyPart;

importjavax.mail.Message;

importjavax.mail.Multipart;

importjavax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.InternetAddress;

importjavax.mail.internet.MimeBodyPart;

importjavax.mail.internet.MimeMessage;

importjavax.mail.internet.MimeMultipart;

 

 

 

publicclassAttachmentEmailUtil {

 

 privateString host ="";// smtp服务器

 privateString from ="";// 发件人地址

 privateString to ="";// 收件人地址

 privateString affix ="";// 附件地址

 privateString affixName ="";// 附件名称

 privateString user ="";// 用户名

 privateString pwd ="";// 密码

 privateString subject ="";// 邮件标题

 

 publicvoidsetAddress(String from, String to, String subject) {

  this.from = from;

  this.to = to;

  this.subject = subject;

 }

 

 publicvoidsetAffix(String affix, String affixName) {

  this.affix = affix;

  this.affixName = affixName;

 }

 

 publicvoidsend(String host, String user, String pwd) {

  this.host = host;

  this.user = user;

  this.pwd = pwd;

 

  Properties props =newProperties();

 

  // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)

  props.put("mail.smtp.host", host);

  // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证

  props.put("mail.smtp.auth","true");

  props.put("mail.smtp.port",465);

  props.put("mail.smtp.ssl.enable",true);

  // 用刚刚设置好的props对象构建一个session

  Session session = Session.getDefaultInstance(props);

 

  // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使

  // 用(你可以在控制台(console)上看到发送邮件的过程)

  session.setDebug(true);

 

  // 用session为参数定义消息对象

  MimeMessage message =newMimeMessage(session);

  try{

   // 加载发件人地址

   message.setFrom(newInternetAddress(from));

   // 加载收件人地址

   message.addRecipient(Message.RecipientType.TO,newInternetAddress(

     to));

   // 加载标题

   message.setSubject(subject);

 

   // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件

   Multipart multipart =newMimeMultipart();

 

   // 设置邮件的文本内容

   BodyPart contentPart =newMimeBodyPart();

   contentPart.setText("第二种方法···");

   multipart.addBodyPart(contentPart);

   // 添加附件

   BodyPart messageBodyPart =newMimeBodyPart();

   DataSource source =newFileDataSource(affix);

   // 添加附件的内容

   messageBodyPart.setDataHandler(newDataHandler(source));

   // 添加附件的标题

   // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码

   sun.misc.BASE64Encoder enc =newsun.misc.BASE64Encoder();

   messageBodyPart.setFileName("=?GBK?B?"

     + enc.encode(affixName.getBytes()) +"?=");

   multipart.addBodyPart(messageBodyPart);

 

   // 将multipart对象放到message中

   message.setContent(multipart);

   // 保存邮件

   message.saveChanges();

   // 发送邮件

   Transport transport = session.getTransport("smtp");

   // 连接服务器的邮箱

   transport.connect(host, user, pwd);

   // 把邮件发送出去

   transport.sendMessage(message, message.getAllRecipients());

   transport.close();

  }catch(Exception e) {

   e.printStackTrace();

  }

 }

 

 publicvoidsendEmail() {

  File file =newFile("/root/EmailFile/content.csv");

  if(!file.exists()) {

   try{

    file.createNewFile();

   }catch(IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

  String pushInfoContent ="成功了";

 

  FileWriter writer =null;

  try{

   // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件

   writer =newFileWriter(file,true);

   writer.write(pushInfoContent +"\r\n");

  }catch(IOException e) {

   e.printStackTrace();

  }finally{

   try{

    if(writer !=null) {

     writer.close();

    }

   }catch(IOException e) {

    e.printStackTrace();

   }

  }

 

  AttachmentEmailUtil cn =newAttachmentEmailUtil();

  // 设置发件人地址、收件人地址和邮件标题

  cn.setAddress("发件人地址","收件人地址","一个带附件的JavaMail邮件(标题)");

  // 设置要发送附件的位置和标题

  cn.setAffix("附件的位置","附件的文件名");

  // 设置smtp服务器以及邮箱的帐号和密码

  cn.send("smtp.qq.com","帐号","密码");

 

  if(file.exists()) {

   file.delete();

  }

 }

}

 

大概就是这样子了。