ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:24.38KB ,
资源ID:5467096      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5467096.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring邮件抽象层.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring邮件抽象层.docx

1、Spring邮件抽象层Spring邮件抽象层22.1.简介资源类库依赖下面所列出的jar文件必须加到你应用程序的classpath中,因为这些都是Spring Framework邮件抽象层所依赖的库文件。 JavaMail mail.jar库 JAF activation.jar库所有这些依赖的库都可以在Spring Framework的Spring-with-dependencies的release包中获得 (同时也可以在网上免费获得)。Spring提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。Spring邮件抽象层的主要包为or

2、g.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。 要获得关于邮件异常层次的更丰富的信息,请参考Javadocs。为了使用JavaMail中的一些特色, 比如MIME类型的信件, Spring提供了MailSender的一个子接口, 即org.springframework.mail.javama

3、il.JavaMailSender。 Spring还提供了一个回调接口org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。22.2.使用Spring邮件抽象假设某个业务接口名为OrderManager:public interface OrderManager void placeOrder(Order order);我们同时假设有一个用例:需要生成带有订单号的email信件, 并向客户发送该订单。22.2.1.MailSender 和 SimpleMailMessage 的基本用法impor

4、t org.springframework.mail.MailException;import org.springframework.mail.MailSender;import org.springframework.mail.SimpleMailMessage;public class SimpleOrderManager implements OrderManager private MailSender mailSender; private SimpleMailMessage templateMessage; public void setMailSender(MailSender

5、 mailSender) this.mailSender = mailSender; public void setTemplateMessage(SimpleMailMessage templateMessage) this.templateMessage = templateMessage; public void placeOrder(Order order) / Do the business calculations. / Call the collaborators to persist the order. / Create a thread safe copy of the t

6、emplate message and customize it SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage); msg.setTo(order.getCustomer().getEmailAddress(); msg.setText( Dear + order.getCustomer().getFirstName() + order.getCustomer().getLastName() + , thank you for placing order. Your order number is + or

7、der.getOrderNumber(); try this.mailSender.send(msg); catch(MailException ex) / simply log it and go on. System.err.println(ex.getMessage(); 上面的代码的bean定义应该是这样的: 22.2.2.使用 JavaMailSender 和 MimeMessagePreparator下面是OrderManager的另一种实现, 使用了MimeMessagePreparator回调接口。 请注意在这个用例中,mailSender属性是JavaMailSender类型

8、, 所以我们可以使用JavaMail的MimeMessage类:import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage;import org.springframework.mail.MailException;import org.springframework.mail.javama

9、il.JavaMailSender;import org.springframework.mail.javamail.MimeMessagePreparator;public class SimpleOrderManager implements OrderManager private JavaMailSender mailSender; public void setMailSender(JavaMailSender mailSender) this.mailSender = mailSender; public void placeOrder(final Order order) / D

10、o the business calculations. / Call the collaborators to persist the order. MimeMessagePreparator preparator = new MimeMessagePreparator() public void prepare(MimeMessage mimeMessage) throws Exception mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(order.getCustomer().getEmail

11、Address(); mimeMessage.setFrom(new InternetAddress(mail); mimeMessage.setText( Dear + order.getCustomer().getFirstName() + + order.getCustomer().getLastName() + , thank you for placing order. Your order number is + order.getOrderNumber(); ; try this.mailSender.send(preparator); catch (MailException

12、ex) / simply log it and go on. System.err.println(ex.getMessage(); Note以上的邮件代码是一个横切关注点,能被完美地重构为自定义Spring AOP切面的候选者,这样它就可以在目标对象OrderManager的一些合适的连接点(joinpoint)中被执行了。Spring Framework的邮件支持直接提供两种MailSender的实现。标准的JavaMail实现和基于Jason Hunter编写的MailMessage类之上的实现,后者位于com.oreilly.servlet包中。请查阅相关Javadocs以获得进一步的

13、资料。22.3.使用MimeMessageHelperorg.springframework.mail.javamail.MimeMessageHelper是处理JavaMail邮件时比较顺手组件之一。它可以让你摆脱繁复的JavaMail API。 通过使用MimeMessageHelper,创建一个MimeMessage实例将非常容易: / of course you would use DI in any real-world casesJavaMailSenderImpl sender = new JavaMailSenderImpl();sender.setHost();MimeMes

14、sage message = sender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message);helper.setTo(test);helper.setText(Thank you for ordering!);sender.send(message);22.3.1.发送附件和嵌入式资源(inline resources)Multipart email允许添加附件和内嵌资源(inline resources)。内嵌资源可能是你在信件中希望使用的图像或样式表,但是又不想把它们作为附件。22.

15、3.1.1.附件下面的例子将展示如何使用MimeMessageHelper来发送一封email,使用一个简单的JPEG图片作为附件:JavaMailSenderImpl sender = new JavaMailSenderImpl();sender.setHost();MimeMessage message = sender.createMimeMessage();/ use the true flag to indicate you need a multipart messageMimeMessageHelper helper = new MimeMessageHelper(messag

16、e, true);helper.setTo(test);helper.setText(Check out this image!);/ lets attach the infamous windows Sample file (this time copied to c:/)FileSystemResource file = new FileSystemResource(new File(c:/Sample.jpg);helper.addAttachment(CoolImage.jpg, file);sender.send(message);22.3.1.2.内嵌资源下面的例子将展示如何使用M

17、imeMessageHelper来发送一封含有内嵌资源的email:JavaMailSenderImpl sender = new JavaMailSenderImpl();sender.setHost();MimeMessage message = sender.createMimeMessage();/ use the true flag to indicate you need a multipart messageMimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setTo(test);/ us

18、e the true flag to indicate the text included is HTMLhelper.setText(, true);/ lets include the infamous windows Sample file (this time copied to c:/)FileSystemResource res = new FileSystemResource(new File(c:/Sample.jpg);helper.addInline(identifier1234, res);sender.send(message);Warning如你所见,嵌入式资源使用C

19、ontent-ID(上例中是identifier1234)来插入到mime信件中去。你加入文本和资源的顺序是非常重要的。首先,你加入文本,随后是资源。如果顺序弄反了,它将无法正常运作!22.3.2.使用模板来创建邮件内容在之前的代码示例中,所有邮件的内容都是显式定义的,并通过调用message.setText(.)来设置邮件内容。 这种做法针对简单的情况或在上述的例子中没什么问题,因为在这里只是为了向你展示基础API。而在你自己的企业级应用程序中, 基于如下的原因,你不会以上述方式创建你的邮件内容: 使用Java代码来创建基于HTML的邮件内容不仅容易犯错,同时也是一件单调乏味的事情 这样做,

20、你将无法将显示逻辑和业务逻辑很明确的区分开 一旦需要修改邮件内容的显式格式和内容,你需要重新编写Java代码,重新编译,重新部署一般来说解决这些问题的典型的方式是使用FreeMarker或者Velocity这样的模板语言来定义邮件内容的显式结构。 这样,你的任务就是在你的代码中,只要创建在邮件模板中需要展示的数据,并发送邮件即可。通过使用Spring对FreeMarker和Velocity的支持类, 你的邮件内容将变得简单,这同时也是一个最佳实践。下面是一个使用Velocity来创建邮件内容的例子: 22.3.2.1.一个基于Velocity的示例使用Velocity来创建你的邮件模板,你需要

21、把Velocity加入到classpath中。 同时要根据应用的需要为邮件内容创建一个或者多个Velocity模板。下面的Velocity模板是这个例子中所使用的基于HTML的模板。 这只是一个普通的文本,你可以通过各种其他的编辑器来编辑该文本,而无需了解Java方面的知识。# in the com/foo/packageHi $user.userName, welcome to the Chipping Sodbury On-the-Hill message boards! Your email address is $user.emailAddress.下面提供了一些简单的代码与Sprin

22、g XML配置,它们使用了上述Velocity模板来创建邮件内容并发送邮件。package com.foo;import org.apache.velocity.app.VelocityEngine;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.mail.javamail.MimeMessagePreparator;import org.springframe

23、work.ui.velocity.VelocityEngineUtils;import javax.mail.internet.MimeMessage;import java.util.HashMap;import java.util.Map;public class SimpleRegistrationService implements RegistrationService private JavaMailSender mailSender; private VelocityEngine velocityEngine; public void setMailSender(JavaMail

24、Sender mailSender) this.mailSender = mailSender; public void setVelocityEngine(VelocityEngine velocityEngine) this.velocityEngine = velocityEngine; public void register(User user) / Do the registration logic. sendConfirmationEmail(user); private void sendConfirmationEmail(final User user) MimeMessag

25、ePreparator preparator = new MimeMessagePreparator() public void prepare(MimeMessage mimeMessage) throws Exception MimeMessageHelper message = new MimeMessageHelper(mimeMessage); message.setTo(user.getEmailAddress(); message.setFrom(webmastercsonth.gov.uk); / could be parameterized. Map model = new HashMap(); model.put(user, user); String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, com/dns/registration-confirmation.vm, model); message.setText(text, true); ; this.mailSender.send(preparator); resource.loader=class class.resou

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1