Spring+quartz實現(xiàn)定時發(fā)送郵件功能實例
更新時間:2017年03月14日 11:26:59 作者:逍遙衛(wèi)子
spring提供的定時發(fā)送郵件功能一直深受廣大web開發(fā)者的喜愛,這篇文章主要介紹了Spring+quartz實現(xiàn)定時發(fā)送郵件功能實例,有興趣的可以了解一下。
在做具體的系統(tǒng)管理時,往往會有每隔一段時間發(fā)給用戶一些郵件的業(yè)務,現(xiàn)在參考的網(wǎng)上的大部分代碼,寫下了我自己的代碼。
在ApplicationContext.xml的內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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 ">
<bean id="testQuartz" class="com.zhuyun.net.AttachmentEmailUtil"></bean>
<!-- bean觸發(fā)方法配置 -->
<bean name="quartzBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- bean名字 -->
<property name="targetObject" ref="testQuartz" /><!--目標對象-->
<!-- bean方法 -->
<property name="targetMethod"><!--目標方法-->
<value>sendEmail</value>
</property>
<property name="concurrent"><!--配置為false不允許任務并發(fā)執(zhí)行-->
<value>false</value>
</property>
</bean>
<!-- bean觸發(fā)時間配置,指定具體的時間執(zhí)行 -->
<bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 觸發(fā)bean配置 -->
<property name="jobDetail" ref="quartzBean" />
<!-- 觸發(fā)時間配置 -->
<property name="cronExpression">
<value>0 0 10 1 * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="default" autowire="default">
<property name="triggers">
<list>
<ref local="quartzTrigger" />
</list>
</property>
<property name="autoStartup" value="true" />
</bean>
</beans>
至于方法如下:
package com.zhuyun.net;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class AttachmentEmailUtil {
private String host = ""; // smtp服務器
private String from = ""; // 發(fā)件人地址
private String to = ""; // 收件人地址
private String affix = ""; // 附件地址
private String affixName = ""; // 附件名稱
private String user = ""; // 用戶名
private String pwd = ""; // 密碼
private String subject = ""; // 郵件標題
public void setAddress(String from, String to, String subject) {
this.from = from;
this.to = to;
this.subject = subject;
}
public void setAffix(String affix, String affixName) {
this.affix = affix;
this.affixName = affixName;
}
public void send(String host, String user, String pwd) {
this.host = host;
this.user = user;
this.pwd = pwd;
Properties props = new Properties();
// 設(shè)置發(fā)送郵件的郵件服務器的屬性(這里使用網(wǎng)易的smtp服務器)
props.put("mail.smtp.host", host);
// 需要經(jīng)過授權(quán),也就是有戶名和密碼的校驗,這樣才能通過驗證
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", 465);
props.put("mail.smtp.ssl.enable", true);
// 用剛剛設(shè)置好的props對象構(gòu)建一個session
Session session = Session.getDefaultInstance(props);
// 有了這句便可以在發(fā)送郵件的過程中在console處顯示過程信息,供調(diào)試使
// 用(你可以在控制臺(console)上看到發(fā)送郵件的過程)
session.setDebug(true);
// 用session為參數(shù)定義消息對象
MimeMessage message = new MimeMessage(session);
try {
// 加載發(fā)件人地址
message.setFrom(new InternetAddress(from));
// 加載收件人地址
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
to));
// 加載標題
message.setSubject(subject);
// 向multipart對象中添加郵件的各個部分內(nèi)容,包括文本內(nèi)容和附件
Multipart multipart = new MimeMultipart();
// 設(shè)置郵件的文本內(nèi)容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("第二種方法···");
multipart.addBodyPart(contentPart);
// 添加附件
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(affix);
// 添加附件的內(nèi)容
messageBodyPart.setDataHandler(new DataHandler(source));
// 添加附件的標題
// 這里很重要,通過下面的Base64編碼的轉(zhuǎn)換可以保證你的中文附件標題名在發(fā)送時不會變成亂碼
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"
+ enc.encode(affixName.getBytes()) + "?=");
multipart.addBodyPart(messageBodyPart);
// 將multipart對象放到message中
message.setContent(multipart);
// 保存郵件
message.saveChanges();
// 發(fā)送郵件
Transport transport = session.getTransport("smtp");
// 連接服務器的郵箱
transport.connect(host, user, pwd);
// 把郵件發(fā)送出去
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendEmail() {
File file = new File("/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 {
// 打開一個寫文件器,構(gòu)造函數(shù)中的第二個參數(shù)true表示以追加形式寫文件
writer = new FileWriter(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 = new AttachmentEmailUtil();
// 設(shè)置發(fā)件人地址、收件人地址和郵件標題
cn.setAddress("發(fā)件人地址", "收件人地址", "一個帶附件的JavaMail郵件(標題)");
// 設(shè)置要發(fā)送附件的位置和標題
cn.setAffix("附件的位置", "附件的文件名");
// 設(shè)置smtp服務器以及郵箱的帳號和密碼
cn.send("smtp.qq.com", "帳號", "密碼");
if (file.exists()) {
file.delete();
}
}
}
大概就是這樣子了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Spring學習筆記3之消息隊列(rabbitmq)發(fā)送郵件功能
- springMVC發(fā)送郵件的簡單實現(xiàn)
- Spring框架JavaMailSender發(fā)送郵件工具類詳解
- Java的Spring框架中實現(xiàn)發(fā)送郵件功能的核心代碼示例
- Spring Boot實戰(zhàn)之發(fā)送郵件示例代碼
- Spring Boot中利用JavaMailSender發(fā)送郵件的方法示例(附源碼)
- SpringBoot使用FreeMarker模板發(fā)送郵件
- spring mail借助qq郵箱服務器發(fā)送郵件
- spring+maven實現(xiàn)發(fā)送郵件功能
- SpringBoot實現(xiàn)發(fā)送郵件任務
相關(guān)文章
Java中String類(字符串操作)的10個常見問題和解決方法
這篇文章主要介紹了Java中String類(字符串)操作的10個常見問題,需要的朋友可以參考下2014-04-04
springboot使用@KafkaListener監(jiān)聽多個kafka配置實現(xiàn)
當服務中需要監(jiān)聽多個kafka時,?需要配置多個kafka,本文主要介紹了springboot使用@KafkaListener監(jiān)聽多個kafka配置實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-04-04
java通過Callable和Future來接收線程池的執(zhí)行結(jié)果
這篇文章主要介紹了java通過Callable和Future來接收線程池的執(zhí)行結(jié)果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

