Java中使用XML创建EMAIL模板 - 编程入门网
参数的版本,它们是:匹配的模式,调用的方法,调用方法所使用的参数数量。在例子的三种情形中第三个参数都是0,说明符合模式的元素是调用方法的唯一参数。在EmailTemplate类中我定义了三个方法:addTo(), addCc(), addBcc(),这三个方法将模版文件中的收件人列表加入到模版类的收件人集合中。
邮件元素的六种类型的子元素的规则都被指定好之后,我开始解析这个文件。在这个例子中, 我传入getEmailTemplate 方法的输入参数InputStream 。parse方法可以解析File,SAX InputSource, InputStream, Reader, 目标文件的URI。我使用InputStream。 由调用这个方法的代码取得XML文件并且把它转化为InputStream 。为了让这个方法更加通用,我可以用Object作为参数,并且在方法内部使用instanceof 来确定参数的类型,再用相应的方式来处理。 方法parse 抛出IOException 或者SAXException。把这些异常传给Log4J,由它来处理,返回null. 如果没有异常抛出, 将返回由Digester创建的EmailTemplate对象。 EmailTemplate类剩下的部分 getEmailTemplate()方法是类EmailTemplate的核心。其他的部分是一些属性值和一些辅助性的方法。有3个String 类型的属性值:内容,主题,寄件人地址,3个ArrayList属性值:to, CC, BCC 列表,这3个值都以String作为基本元素。还有相应的get,set和加入集合的方法。还有3个附加的方便的方法:getToAddresses(), getCcAddresses(), 和 getBccAddresses()。JavaMail接口需要InternetAddress 数组作为地址集合的参数,这些方法可以把对象的String数组转化为JavaMail接口需要的数组形式。 类EmailSender 当模版文件被解析成EmailTemplate对象,下一步就是发送邮件信息。EmailSender 类包含一个静态的,重载的方法-sendEmail()。 这个方法可以通过很多种方式调用,所有的方式都是对下面这个完全参数方法的一个引用: public static void sendEmail( String aTo, EmailTemplate aTemplate, String[] aArgs) 参数不需要过多的解释。第一个是邮件的发送地址。你可以在邮件模版里指定很多接收人地址,但是在运行时刻,大多数情况下,系统只需要一个接收人。比如说,你发送一封密码提醒的邮件,只需要指定申请密码的用户的邮件地址。在邮件模版里指定的收件人列表在某种情况下适用:作为测试,系统需要发送邮件到特定收件人列表或者发送时需要包含特定收件人列表。比如说,假设一个系统每当订单提交的时候需要通过一封邮件触发一个workflow,在这种情形下邮件模版种特定的接收人地址是有意义的。 第二个参数是EmailTemplate自身。第三个参数是MessageFormat解析邮件主题和内容所需要的参数集。由调用这个方法的代码来创建个性化邮件模版所需要的信息数组。也有其他申明的方法简化了这个方法的调用(所以你可以在不指定收件人,或者在没有参数的情况下调用这个方法)。 方法内部由使用JavaMail发送邮件所需要的一系列调用组成。我觉得使用JavaMail会造成许多冗余,我们来具体看一下。首先,我要通过检测来确定EmailTemplate是否为空。如果为空,什么都不能做。设定的第一步是使用SMTP server的设置创建一个Properties对象(Hashtable)。我把SMTP server的设置设定在 文件里,所以我把这个值从属性文件里读出来然后放到我创建的properties对象里去。 接着我创建了一个JavaMail Session 对象传入Properties 对象。Session对象在创建MimeMessage对象的时候需要。这个是我待会要做的。然后我将From:的值指定到传入参数EmailTemplate对象的相应栏位。下一步我把To:的值设定到我构建的消息中。这里会有一些技巧,因为用户可以传入To: 地址,同时邮件模版里也包含一些To:地址。问题在于JavaMail 喜欢使用数组描速地址列表,所以 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |