Spring+quartz实现定时发送邮件功能实例
在做具体的系统管理时,往往会有每隔一段时间发给用户一些邮件的业务,现在参考的网上的大部分代码,写下了我自己的代码。
在ApplicationContext.xml的内容如下:
sendEmail false 00101*?
至于方法如下:
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{
privateStringhost="";//smtp服务器
privateStringfrom="";//发件人地址
privateStringto="";//收件人地址
privateStringaffix="";//附件地址
privateStringaffixName="";//附件名称
privateStringuser="";//用户名
privateStringpwd="";//密码
privateStringsubject="";//邮件标题
publicvoidsetAddress(Stringfrom,Stringto,Stringsubject){
this.from=from;
this.to=to;
this.subject=subject;
}
publicvoidsetAffix(Stringaffix,StringaffixName){
this.affix=affix;
this.affixName=affixName;
}
publicvoidsend(Stringhost,Stringuser,Stringpwd){
this.host=host;
this.user=user;
this.pwd=pwd;
Propertiesprops=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
Sessionsession=Session.getDefaultInstance(props);
//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
//用(你可以在控制台(console)上看到发送邮件的过程)
session.setDebug(true);
//用session为参数定义消息对象
MimeMessagemessage=newMimeMessage(session);
try{
//加载发件人地址
message.setFrom(newInternetAddress(from));
//加载收件人地址
message.addRecipient(Message.RecipientType.TO,newInternetAddress(
to));
//加载标题
message.setSubject(subject);
//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipartmultipart=newMimeMultipart();
//设置邮件的文本内容
BodyPartcontentPart=newMimeBodyPart();
contentPart.setText("第二种方法···");
multipart.addBodyPart(contentPart);
//添加附件
BodyPartmessageBodyPart=newMimeBodyPart();
DataSourcesource=newFileDataSource(affix);
//添加附件的内容
messageBodyPart.setDataHandler(newDataHandler(source));
//添加附件的标题
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"
+enc.encode(affixName.getBytes())+"?=");
multipart.addBodyPart(messageBodyPart);
//将multipart对象放到message中
message.setContent(multipart);
//保存邮件
message.saveChanges();
//发送邮件
Transporttransport=session.getTransport("smtp");
//连接服务器的邮箱
transport.connect(host,user,pwd);
//把邮件发送出去
transport.sendMessage(message,message.getAllRecipients());
transport.close();
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidsendEmail(){
Filefile=newFile("/root/EmailFile/content.csv");
if(!file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
StringpushInfoContent="成功了";
FileWriterwriter=null;
try{
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
writer=newFileWriter(file,true);
writer.write(pushInfoContent+"\r\n");
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(writer!=null){
writer.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
AttachmentEmailUtilcn=newAttachmentEmailUtil();
//设置发件人地址、收件人地址和邮件标题
cn.setAddress("发件人地址","收件人地址","一个带附件的JavaMail邮件(标题)");
//设置要发送附件的位置和标题
cn.setAffix("附件的位置","附件的文件名");
//设置smtp服务器以及邮箱的帐号和密码
cn.send("smtp.qq.com","帐号","密码");
if(file.exists()){
file.delete();
}
}
}
大概就是这样子了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。