服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Spring+quartz实现定时发送邮件功能实例

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

2020-08-28 10:33逍遥卫子 Java教程

spring提供的定时发送邮件功能一直深受广大web开发者的喜爱,这篇文章主要介绍了Spring+quartz实现定时发送邮件功能实例,有兴趣的可以了解一下。

在做具体的系统管理时,往往会有每隔一段时间发给用户一些邮件的业务,现在参考的网上的大部分代码,写下了我自己的代码。

在ApplicationContext.xml的内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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触发方法配置 -->
 <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不允许任务并发执行-->
   <value>false</value>
  </property>
 </bean>
  
  <!-- bean触发时间配置,指定具体的时间执行 -->
  <bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
   <!-- 触发bean配置 -->
   <property name="jobDetail" ref="quartzBean" />
   <!-- 触发时间配置 -->
   <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>

至于方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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 = ""; // 发件人地址
 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();
 
  // 设置发送邮件的邮件服务器的属性(这里使用网易的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 = new MimeMessage(session);
  try {
   // 加载发件人地址
   message.setFrom(new InternetAddress(from));
   // 加载收件人地址
   message.addRecipient(Message.RecipientType.TO, new InternetAddress(
     to));
   // 加载标题
   message.setSubject(subject);
 
   // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
   Multipart multipart = new MimeMultipart();
 
   // 设置邮件的文本内容
   BodyPart contentPart = new MimeBodyPart();
   contentPart.setText("第二种方法···");
   multipart.addBodyPart(contentPart);
   // 添加附件
   BodyPart messageBodyPart = new MimeBodyPart();
   DataSource source = new FileDataSource(affix);
   // 添加附件的内容
   messageBodyPart.setDataHandler(new DataHandler(source));
   // 添加附件的标题
   // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
   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();
   // 发送邮件
   Transport transport = session.getTransport("smtp");
   // 连接服务器的邮箱
   transport.connect(host, user, pwd);
   // 把邮件发送出去
   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 {
   // 打开一个写文件器,构造函数中的第二个参数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();
  // 设置发件人地址、收件人地址和邮件标题
  cn.setAddress("发件人地址", "收件人地址", "一个带附件的JavaMail邮件(标题)");
  // 设置要发送附件的位置和标题
  cn.setAffix("附件的位置", "附件的文件名");
  // 设置smtp服务器以及邮箱的帐号和密码
  cn.send("smtp.qq.com", "帐号", "密码");
 
  if (file.exists()) {
   file.delete();
  }
 }
}

大概就是这样子了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/xhw123xhw/p/5641316.html

延伸 · 阅读

精彩推荐