感谢网友 网络时空 兄弟对我的提醒,我已经把邮件发送中加上了邮件嵌入图片和增加附件方面的内容.谢谢
8.1.1
任务调度简介
Spring
包含了对定时调度服务的内置支持类。当前,
Spring
支持从
JDK1.3
开始内置的
Timer
类和
Quartz Scheduler
。二者都可以通过
FactoryBean
,分别指向
Timer
或
Trigger
实例的引用进行配置。更进一步,有个对
Quartz Scheduler
和
Timer
都有效的工具类可以让你调用某个目标对象的方法(类似通常的
MethodInvokingFactoryBean
操作)。
Spring
还包含有用于线程池调度的类,它针对
Java 1.3,1.4,5
和
JEE
环境的差异都进行了抽象。
8.1.2
Spring
中使用Quartz
Quartz
是一个开源的作业调度框架,它完全由
Java
写成,并设计用于
J2SE
和
J2EE
应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,
EJB
作业预构建,
JavaMail
及其它,支持
cron-like
表达式等等。而在日常开发中我们也是优先使用
Quartz
进行计划任务的调度。
Scheduler
代表一个
Quartz
的独立运行容器我们的任务需要由它来进行执行,请看下面的代码清单
代码清单
1
<
bean
id
=
"scheduler"
class
=
"org.springframework.scheduling.quartz.
SchedulerFactoryBean"
>
<
property
name
=
"triggers"
>
<
list
>
<
ref
local
=
"estimateLogTriggerQuartz"
/>
</
list
>
</
property
>
</
bean
>
<!―-
配置触发器调度的
Bean -->
<
bean
id
=
"estimateLog"
class
=
"org.springframework.scheduling.quartz.
MethodInvokingJobDetailFactoryBean"
>
<!--
引用一个
Bean -->
<
property
name
=
"targetObject"
ref
=
"estimateLogTrigger"
/>
<!--
指定目标
Bean
的方法
-->
<
property
name
=
"targetMethod"
value
=
"doSaveEstimateLog"
/>
</
bean
>
<!―-
配置触发器
-->
<
bean
id
=
"estimateLogTriggerQuartz"
class
=
"org.springframework.scheduling.quartz. CronTriggerBean"
>
<
property
name
=
"jobDetail"
ref
=
"estimateLog"
/>
<!--
每月最后一天
23.55
执行
-->
<
property
name
=
"cronExpression"
value
=
"0 55 23 L * ?"
/>
</
bean
>
代码清单
1
中配置了一个名为
SchedulerFactoryBean
、
CronTriggerBean
和
MethodInvokingJobDetailFactoryBean
的
Bean
这是
Spring
为了降低
Quartz
的使用难度,为创建
Quartz
的
Scheduler
、
Trigger
和
JobDetail
提供了便利的
FactoryBean
,
SchedulerFactoryBean
的
triggers
的属性为
triggers[]
类型
,
可以通过该属性注册多个
Trigger
,
Bean
estimateLogTriggerQuartz
定义了
jobDetail
执行的时间和执行的方法。定义触发器执行的就是
0 55 23 L * ?
这段表达式,这个表达式定义了在每月的最后一天
L
的
23
:
55
执行。
8.2 Spring
的邮件支持
8.2.1
Spring
邮件的简介
Spring
提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。
Spring
在
org.springframework.mail.javamail
包下提供了对JavaMail邮件系统的支持,通过这些支持类,编写JavaMail邮件发送程序变得轻松易行。
1)
发送普通邮件
代码清单1
import
org.springframework.mail.SimpleMailMessage;
import
org.springframework.mail.javamail.JavaMailSenderImpl;
public
class
SendMail {
public
static
void
main(String args[]){
JavaMailSenderImpl senderimpl =
new
JavaMailSenderImpl();
Properties properties =
new
Properties();
properties.setProperty(
"mail.smtp.auth"
,
"true"
);
senderimpl.setJavaMailProperties(properties);
//
设定
mail server
senderimpl.setHost(
"smtpcom.263xmail.com"
);
//
设置用户名和密码
senderimpl.setUsername(
"tony"
);
senderimpl.setPassword(
"tony"
);
//
建立邮件消息
SimpleMailMessage mailmessage =
new
SimpleMailMessage();
//
设置收件人
mailmessage.setTo(array);
//
设置寄件人
//
设置邮件主题
mailmessage.setSubject(
"Test"
);
//
设置邮件内容
mailmessage.setText(
"Test Send Mail"
);
//
发送邮件
senderimpl.send(mailmessage);
System.
out
.println(
"Send success....."
);
}
}
代码清单
1
中首先初始化了一个
JavaMailSenderImpl
实例,然后设置邮件服务器的端口地址,发送人的帐户和密码。
SimpleMailMessage
对象代表了邮件信息,包含一系列的属性。通过代码清单
1
我们可以很方便的发送一封邮件或者群发邮件。下面再介绍一下发送
HTML
格式的邮件。
2)
发送
HTML
邮件
代码清单
2
import
javax.mail.MessagingException;
import
javax.mail.internet.MimeMessage;
import
org.springframework.mail.javamail.JavaMailSenderImpl;
import
org.springframework.mail.javamail.MimeMessageHelper;
public
class
SendMail {
public
static
void
main(String args[]){
JavaMailSenderImpl senderimpl =
new
JavaMailSenderImpl();
Properties properties =
new
Properties();
properties.setProperty(
"mail.smtp.auth"
,
"true"
);
senderimpl.setJavaMailProperties(properties);
//
设定
mail server
senderimpl.setHost(
"smtpcom.263xmail.com"
);
//
设置用户名和密码
senderimpl.setUsername(
"tony"
);
senderimpl.setPassword(
"tony"
);
//
建立邮件消息
MimeMessage mimeMessage = senderimpl.createMimeMessage();
MimeMessageHelper messagehelper =
new
MimeMessageHelper(mimeMessage);
try
{
//
设置寄件人
//
设置收件人
//
设置邮件主题
messagehelper.setSubject(
"Test HTML"
);
//true
表示启动
HTML
格式的邮件
messagehelper.setText(
"<html><head></head><body>Hello World ! </body></html>"
,
true
);
}
catch
(MessagingException e) {e.printStackTrace();}
//
发送邮件
senderimpl.send(mimeMessage);
System.
out
.println(
"Send success....."
);
}
}
根据代码清单
2
我们可看到只需要简单的设置
messagehelper.setText(
"<html><head></head><body>
Hello World ! </body></html>"
,
true
);
第二个参数为
true
就可以发送
HTML
格式的邮件。
3)
发送含有附件和内嵌文件的邮件
代码清单
3
import
java.io.IOException;
import
java.util.Properties;
import
javax.mail.MessagingException;
import
javax.mail.internet.MimeMessage;
import
org.springframework.core.io.ClassPathResource;
import
org.springframework.mail.javamail.JavaMailSenderImpl;
import
org.springframework.mail.javamail.MimeMessageHelper;
public
class
SendMail {
public
static
void
main(String args[])
throws
MessagingException,
IOException {
JavaMailSenderImpl senderimpl =
new
JavaMailSenderImpl();
Properties properties =
new
Properties();
properties.setProperty(
"mail.smtp.auth"
,
"true"
);
senderimpl.setJavaMailProperties(properties);
//
设定
mail server
senderimpl.setHost(
"smtpcom.263xmail.com"
);
//
设置用户名和密码
senderimpl.setUsername(
"*****@crimsonlogictj.com"
);
senderimpl.setPassword(
"*****"
);
//
建立邮件消息
MimeMessage mimeMessage = senderimpl.createMimeMessage();
MimeMessageHelper messagehelper =
new
MimeMessageHelper(mimeMessage,
true
,
"UTF-8"
);
//
设置寄件人
messagehelper.setFrom(
"*****@crimsonlogictj.com"
);
//
设置收件人
messagehelper.setTo(
"*****@crimsonlogictj.com"
);
//
设置邮件主题
messagehelper.setSubject(
"Test HTML"
);
// true
表示启动
html
格式的邮件
messagehelper.setText(
"<html><head></head><body>"
+
"<img src=\"cid:img1\"></img>"
+
//
在
HTML
文本中嵌入了一个名为
cid:img1
的图片
"<h1>Hello World</h1></body></html>"
,
true
);
//
定义图片
ClassPathResource img =
new
ClassPathResource(
"01.jpg"
);
//
定义附件
1
ClassPathResource file2 =
new
ClassPathResource(
"02.jpg"
);
//
定义附件
2
ClassPathResource file3 =
new
ClassPathResource(
"03.jpg"
);
//
将图片加入
messagehelper.addInline(
"img1"
, img.getFile());
//
将附件
1
加入
messagehelper.addAttachment(file2.getFile().getName(),
file2
.getFile());
//
将附件
2
加入
messagehelper.addAttachment(file3.getFile().getName(),
file3.getFile());
//
发送邮件
senderimpl.send(mimeMessage);
System.
out
.println(
"Send success....."
);
}
}
从代码清单
3
中我们可以看到为一封邮件嵌入图片和加入附件都非常简单,但是在实际应用中不建议大家在邮件中嵌入图片文件或者声音文件,因为这样会增加邮件的大小,影响了邮件发送的效率,建议还是架设一个专用的服务器用于存放图片文件,在邮件中直接通过
URL
来引用这些文件。
回复网络时空兄弟 以下是我的代码结构.
我的其它Spring文章,也许会对您有帮助
Spring的任务调度和邮件发送
Spring应用的单元测试
Spring的数据库支持
Spring的MVC框架
Spring的IoC容器
Spring对AOP的支持
Spring2.5注释驱动与基于注释的MVC