今天我们谈到Spring提供的邮件发送不仅支持简单邮件的发送、添加附件,而且还可以使用velocity模板控制页面样式。 闲来无事,翻看《Spring in Action》,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多。- T' X! c, k6 H% h% G7 N8 Z
Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类Mail 的jar包。; {& \# Y2 D' y: k7 ?) [
我们首先得声明一个MailSender对象,因为MailSender对象只有两个重载的send(…)方法,显得有些简陋,我们建议选用JavaMailSender接口,或者干脆直接使用实现类,JavaMailSenderImpl。笔者是使用的JavaMailSenderImpl对象,功能丰富。
+ T3 z& J7 v, `+ G4 A 声明JavaMailSenderImpl对象,并在构造函数中初始化(当然也可以使用IoC容器初始化):' t" M/ k- q3 e/ [, ^' U0 a
public class SpringMailSender {
9 j! J& h6 N8 k7 b$ g3 W // Spring的邮件工具类,实现了MailSender和JavaMailSender接口
) n. d/ c$ f1 D private JavaMailSenderImpl mailSender;
. Q9 r3 X/ Y: k3 |( f public SpringMailSender() {
3 Z* n9 V0 x( H G // 初始化JavaMailSenderImpl,当然推荐在spring配置文件中配置,这里是为了简单# }" \4 d% q9 C( D0 q# a2 L
mailSender = new JavaMailSenderImpl();
7 O, V9 G# r7 ?: I" R // 设置参数2 V$ L) S! Y& W
mailSender.setHost("smtp.qq.com");- ?" y9 T8 ~4 ^8 |& ~2 K
mailSender.setUsername("786553789@qq.com");7 k' D7 K! I8 Y5 d$ N9 o! G+ N( D) ]
mailSender.setPassword("556WULI779");
* L. G! F2 n0 {' x/ ^ … ?. c4 C# R3 B: }. ~* R
得到了MailSender对象之后,就可以发送邮件了,下面是示例代码,没有封装,仅供参考。
~' r* x7 b$ R% y! J3 @! N 1、发送简单邮件" v4 o% h$ \3 o7 X3 _2 t5 s
/**5 @: J" d. Z$ G3 w2 w4 K! V
* 简单邮件发送
( }% a$ \8 G, M- T *
/ h, _& m3 w0 Q" E */% w# G% F4 M; }& p* J
public void simpleSend() {# k" W5 A1 Y( l+ F+ k, s; [
// 构建简单邮件对象,见名知意, E/ z/ z8 F+ K. \ n
SimpleMailMessage smm = new SimpleMailMessage();
/ p5 F8 o& p) F: y // 设定邮件参数
& A3 v4 s3 U5 Y" ^ smm.setFrom(mailSender.getUsername());
. g0 }; a+ F9 v3 t* `0 @( n smm.setTo("mosaic@126.com");
* _" Q6 @! B- c! I W. q) D5 I; I smm.setSubject("Hello world");- x; C/ Q' t$ e5 V2 |- a
smm.setText("Hello world via spring mail sender");( E) H! \, N# _6 P
// 发送邮件
: J4 g3 Y5 D- T mailSender.send(smm);
; K9 k- D0 x5 s8 b) f }
& s& R+ u$ F! D$ p 2、发送带附件的邮件0 W8 N" k" ]2 G8 m. Q
/**
2 f$ G4 l1 S. h. @' x+ m * 带附件的邮件发送
' X; l* u4 j m" z1 I; [ *
2 }+ s- E5 b# h& t * @throws MessagingException' h! d/ Z7 |, {7 e1 b/ W
*/
0 t2 ?& {/ b% T. z$ z+ c( x public void attachedSend() throws MessagingException {4 v) M5 q4 Y3 D, C& ?% x8 [& d
//使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容) L+ ]* B) u# A
MimeMessage msg = mailSender.createMimeMessage();, G) F. w- [" g, m8 m
//创建MimeMessageHelper对象,处理MimeMessage的辅助类
$ {- y! p$ x! @5 s' X MimeMessageHelper helper = new MimeMessageHelper(msg, true);
( E D9 v9 I$ d; Q& R( @1 C" ?6 F //使用辅助类MimeMessage设定参数; O$ i8 h$ a7 s9 e! p+ M
helper.setFrom(mailSender.getUsername());) `$ u$ J6 q$ e% q
helper.setTo("mosaic@126.com");
* |6 c X5 N# |- A0 O helper.setSubject("Hello Attachment");
& c |& b( s" B0 A0 ]! f! ^ helper.setText("This is a mail with attachment");
0 |* D7 j4 ? H$ R& u' E //加载文件资源,作为附件; P! T7 J; o4 u( D
ClassPathResource file = new ClassPathResource(
: K) w, k) U) x U. k {, G "Chrysanthemum.jpg");' ]5 @" O! t! `; d9 [
//加入附件/ B8 r3 L8 h# G2 [) x7 H
helper.addAttachment("attachment.jpg", file);
: ]( C+ c% x) I$ E2 A3 z! N# P //发送邮件& I9 m& L- U; k' l9 P
mailSender.send(msg);( O1 \5 F B# ` u
}, \7 ~7 |4 U$ m0 X+ x
3、发送富文本邮件( c$ L8 w# L" a# @
/**发送富文本邮件
q* Y- i9 }3 _) O3 V * @throws MessagingException2 g3 E- n @1 T6 f% q1 l
*/+ w+ T+ a% V6 o
public void richContentSend() throws MessagingException {
; Z- B4 S$ H }6 z4 m! E U8 ~6 F MimeMessage msg = mailSender.createMimeMessage();- x' l* x; g. X s( v$ a
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
' y5 v s4 m! B( v2 m6 m" ?8 n helper.setFrom(mailSender.getUsername());- {; W: F; p. E% e, D
helper.setTo("mosaic@126.com");
3 U$ g! U3 C0 B! i4 y( f! j7 b+ f8 I helper.setSubject("Rich content mail");! k. |" c7 R( h' T
//第二个参数true,表示text的内容为html,然后注意标签,src='cid:file',
: G0 g; j5 k6 v2 o# r 'cid'是contentId的缩写,'file'是一个标记,
+ J( O* W6 m4 p! O9 @0 y' q: Q* B, V 需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件9 G% H, K* C8 ^7 A/ K' U5 m
helper.setText(* i0 [' T/ ~6 s& x8 P+ d( E% ^
"Hello Html Email
; s7 t& W- I0 A, n: p; u R",
& I# E6 D( D' _- O0 F) X3 H. A true);5 Y* g6 C3 a% _2 e6 t2 [- ^
FileSystemResource file = new FileSystemResource(
$ i N' |) L# |6 g5 t5 T* H "C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");& x- ^( c, M7 Z& M5 d" N H
helper.addInline("file", file);
* t! f/ A6 B* G8 p5 ]! b% C mailSender.send(msg);
0 @6 E6 G d2 y" ` } |