当前位置: 首页 > news >正文

免费的行情网站app网页网络会议系统app

免费的行情网站app网页,网络会议系统app,公墓网站建设,有谁会设制网站邮件模板让我们来看看邮件模板的格式。模板是XML文件#xff0c;它包含一个根元素和一系列根的子元素。根元素是。必要的子元素是, , 和 。可选的子元素是 , , 和 。如果你使用过邮件系统#xff0c;那么你可以推导出这些元素实际包含的内容。可选的元素有多个实例#xff0…邮件模板让我们来看看邮件模板的格式。模板是XML文件它包含一个根元素和一系列根的子元素。根元素是。必要的子元素是, , 和 。可选的子元素是 , , 和 。如果你使用过邮件系统那么你可以推导出这些元素实际包含的内容。可选的元素有多个实例所以你可以为每种类型的接收者指定多个地址。我待会会在描述消息处理的时候来解释运行机制。以下是一个模板文件的例子。raferafe.ussomeoneexample.comsomeoneelseexample.comraferafe.usThis is the subject可定制的模板属性文件的一个有用的特性是你可以使用MessageFormat 类用动态传入的值替代属性文件里的被指定参数。比如说如果你需要在属性文件里指定errors,其中一个errors是file not found 你可以这样写file.not.found.errorError, could not find file {0}.然后在运行时刻你这样使用MessageFormatResourceBundle bundle ResourceBundle.getBundle(MyProperties, currentLocale);Object[] arguments     { some_file.txt };String newString       MessageFormat.format(bundle.getString(file.not.found.error), arguments);最后newString 将包含Error, could not find file some_file.txt.我在这个系统里加入了类似的灵活性。 可以格式化所有的字符串所以你可以在邮件模版的subject 和body元素里内嵌在属性文件使用的同样的令牌。在某种情形下你希望在发送邮件的时候插入个人化的信息。比如你希望在邮件内容里或者订单的内容里包含收件人的姓。本系统使用MessageFormat 来处理邮件模版的内容和主题从而解决这个问题。处理内容和主题的时候只使用一个参数数组。这样主题里可以包含令牌{0}, {2}, {3},  内容可以包含令牌{0}, {1}, {4} 。我之所以采用这种方式是因为在很多情形下主题和内容使用相同的参数同时这种方式也简化了传递给EmailSender所需要的参数。处理模版创建完模版下一步所要做的就是处理它。我们知道现在有很多的XML处理包可供选择。Commons Digester是Jakarta的公共项目最初是为了在Struts项目中快速方便的解析Struts的的配置文件而产生的。它提供了从XML文件里的元素到使用类似于XPath  语法的数据结构的映射。 好处在于为了从        XML文件里得到某个元素你不必用SAX一个节点一个节点的解析也不必使用DOM处理树状数据结构。下面这个方法从XML文件里读取数据然后把数据拷贝到EmailTemplate对象中。public static EmailTemplate getEmailTemplate(InputStream aStream){Digester digester new Digester();digester.setValidating(false);digester.addObjectCreate(email, EmailTemplate.class);digester.addBeanPropertySetter(email/subject, subject);digester.addBeanPropertySetter(email/body, body);digester.addBeanPropertySetter(email/from, from);digester.addCallMethod(email/to, addTo, 0);digester.addCallMethod(email/cc, addCc, 0);digester.addCallMethod(email/bcc, addBcc, 0);try{return (EmailTemplate)digester.parse(aStream);}catch (IOException e){logger.error(Error: , e);return null;}catch (SAXException e){logger.error(Error: , e);return null;}}让我们来逐行研究这段代码。Commons Digester工作的原理是由你来指定解析文件的一些规则。因为没有规范邮件模版的DTD文件所以在指定处理规则之前我将validating flag设定为false。开始处理文件的时候我实例化Digester对象然后调用方法建立数据映射规则。首先我调用addObjectCreate()方法来建立创建EmailTemplate对象的规则。email是XML模版文件的根元素。因此模版文件和EmailTemplate 对象一一对应。我使用addBeanPropertySetter()来处理在模版文件中只出现一次的元素。这个方法有两个参数元素的路径和要调用的赋值方法。在第一次调用的时候我指定在文件中符合email/subject 模式的元素应该赋值给EmailTemplate 类的subject 。我们用 “/”来描速XML文件的内嵌关系。在这个例子中符合subject模式的元素是email 子元素。为了提供更多的灵活性我们可以使用Wildcards。参考Commons Digester的JavaDoc 你可以了解详细的模式的构成方式。使用赋值方法处理在模版文件中出现多次的元素是不可行的。我们使用addCallMethod()来处理这种情形这个方法从元素中取值并且调用指定的方法。我使用这个方法有三个参数的版本它们是匹配的模式调用的方法调用方法所使用的参数数量。在例子的三种情形中第三个参数都是0说明符合模式的元素是调用方法的唯一参数。在EmailTemplate类中我定义了三个方法addTo(), addCc(),  addBcc()这三个方法将模版文件中的收件人列表加入到模版类的收件人集合中。邮件元素的六种类型的子元素的规则都被指定好之后我开始解析这个文件。在这个例子中 我传入getEmailTemplate 方法的输入参数InputStream 。parse方法可以解析FileSAX 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作为基本元素。还有相应的getset和加入集合的方法。还有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 喜欢使用数组描速地址列表所以由我来决定接收人列表的有多大然后构建传入的参数。因为CC: BCC:的地址必须在模版里指定我们可以直接来处理它们。我使用EmailTemplate类里的方法把其他的收件人加入到消息里。就像我开始提到的我使用MessageFormat解析处理邮件主题和内容的方法所需要的参数集。做完之后我把新的主题拷贝到消息主体里。如此处理消息的内容。剩下的就是调用Transport.send()并且传入MimeMessage 对象。使用这个系统我刚才已经解释了系统的运作原理现在我来解释如何通过 servlet来使用它在其他程序里调用的方式是类似的。以下是代码// Grab the email template.InputStream template getServlet().getServletConfig().getServletContext().getResourceAsStream(/WEB-INF/email/registrationNotification.xml);EmailTemplate notification EmailTemplate.getEmailTemplate(template);// Create the section of the email containing the actual user data.String[] args { Rafe };EmailSender.sendEmail(raferafe.us, notification, args);使用这个系统的第一步是把你的XML模版文件转化成InputStream。 因为我使用的是servlet,我从ServletContext取得这个文件。当然还有其他的方式取得这个文件但是在servlet环境里这种方式很好用。我只用把InputStream 传给刚才所描述的EmailTemplate.getEmailTemplate()方法就可以了。下一步建立个性化邮件所需要的参数数组然后调用方法EmailSender.sendEmail()。更多这个系统还可以更多的优化有两个比较明显的需要改善的地方系统应该同时支持纯文本和HTML支持附件。创建这种类型的信息需要使用类型javax.mail.MimeMultipart。还有在何处存储附件和如何指定附件的问题。在我的系统里我没有在模版文件里处理附件因为我的附件是在邮件发送的时候创建的。Rafe Colburn 是一个Java开发工程师同时也是一名计算机图书的作者他使用过PerlCGI, HTML, JAVAposted on 2006-02-28 09:53 黑咖啡 阅读(469) 评论(3)  编辑  收藏 所属分类: tec
http://www.yutouwan.com/news/47867/

相关文章:

  • 做网站为什么需要营业执照天津行业网站建设
  • htmi 个人小网站 模板网络引流怎么做啊?
  • 禅城区企业网站建设大连城市建设集团网站
  • 网站开发语言html天津网站建设求职简历
  • 做网站个体户执照iis wordpress ftp
  • 大型网站需要什么样的团队深圳黄页信息网
  • 做餐饮店铺哪个网站wordpress md5
  • 保利威视 wordpress白帽seo公司
  • 没有网站怎样做搜索引擎推广淡水网站建设定制
  • 网站服务器有哪些种类网站空间支持下载但不能下载文件
  • 单页淘宝客网站php网站下载器
  • 在线制作书封网站wordpress永久免费
  • 大气网站模板怎么免费制作企业网站
  • 网页设计网站简单静态模板哪个做简历的网站可以中英的
  • 广州番禺网站制作推广如何网站专题策划
  • 谁做的四虎网站是多少泉州网上房地产
  • c 做网站优点免费的wordpress企业模板
  • 粮油移动端网页设计素材网站seo诊断分析报告
  • 影楼做网站wordpress需要身份验证
  • 巨腾外贸网站建设公司外贸订单怎么找
  • 肥西县建设局资询网站中国室内设计公司排名榜
  • 开发什么网站免费行情软件app网站mnw直
  • 在兔展上怎么做网站页面应用商店网站源码
  • 死链对网站链轮的影响装饰工程包括哪些主要内容
  • 各网站推广做soho外贸网站
  • wordpress网站视频播放磁力蜘蛛种子搜索
  • 淄博企业网站建设价格简述网络营销的方法
  • 外贸网站如何seo推广开发网页游戏平台
  • 南通港闸区城乡建设局网站电商网站定制开发
  • 上海网站的优化公司wordpress加超链接