- 浏览: 79939 次
- 性别:
- 来自: 重庆
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第18章. iText PDF 生成 -
super0555:
managed
第13章 Seam 应用程序框架 -
Javakeith:
代码呢?共享下代码呗!
第18章. iText PDF 生成 -
tonyshen277:
同感啊。还在做Win32下的开发,楼主所说的一个都不能少啊。
转自baidu wqqq 给软件开发初学者 -
kdboy:
的确,把人放在宇宙中去看,从上帝的眼中去看,人的确是非常渺小, ...
人生是什么
现在Seam包含一个用于模板和发送邮件的可选组件。
Email支持由jboss-seam-mail.jar提供。这个jar包含用来构建邮件的邮件 JSF控件和mailSession(邮件会话)管理组件。
examples/mail项目包含一个关于操作邮件支持的例子。它演示了正确的打包,并且包含了一些演示当前支持的关键功能的例子。
你可以使用Seam的集成测试环境测试你的邮件。见章节 35.3.4,“集成测试Seam邮件”
21.1.创建一个消息
你不需要为了使用Seam邮件而学习全部的新模板语言----一个邮件仅仅是一个facelet!
<m:message xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="http://jboss.com/products/seam/mail"
xmlns:h="http://java.sun.com/jsf/html">
<m:from name="Peter" address="peter@example.com" />
<m:to name="#{person.firstname} #{person.lastname}">#{person.address}</m:to>
<m:subject>Try out Seam!</m:subject>
<m:body>
<p><h:outputText value="Dear #{person.firstname}" />,</p>
<p>You can try out Seam by visiting
<a href="http://labs.jboss.com/jbossseam">http://labs.jboss.com/jbossseam</a>.</p>
<p>Regards,</p>
<p>Pete</p>
</m:body>
</m:message>
<m:message>标签打包了整个消息,告诉Seam开始渲染一封邮件。在<m:message>标签内部我们使用一个<m:from>标签来设置消息来自谁,一个<m:to>标签来指定发件人(注意我们如何象我们在普通facelet中使用EL)和一个<m:subject>标签。
<m:body>标签打包了电子邮件的主体。你可以在主体中使用标准的HTML标签就和JSF组件中使用一样。
所以,现在你已经有了你的邮件模板,你要如何发送它?好的,在渲染m:message结束时,mailSession被调用来发送邮件,所以你要做的全部是请求Seam渲染视图:
@In(create=true)
private Renderer renderer;
public void send() {
try {
renderer.render("/simple.xhtml");
facesMessages.add("Email sent successfully");
}
catch (Exception e) {
facesMessages.add("Email sending failed: " + e.getMessage());
}
}
假如,例如,你输入了一个无效的电子邮件地址,那么一个异常将会被抛出,它被捕获并随后显示给用户。
21.1.1. 附件
Seam使电子邮件添加附件变得容易。在处理文件时,它支持被使用的大多数标准java类型。
如果你想要邮寄jboss-seam-mail.jar:
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar"/>
Seam会从类路径加载文件,并附加它到邮件。 默认时,它会以jboss-seam-mail.jar被附加;如果你要想它以其它名字,你只能增加fileName 属性:
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar" fileName="this-is-so-cool.jar"/>
你也可以系上一个java.io.File, 一个 java.net.URL:
<m:attachment value="#{numbers}"/>
或者一个 byte[] 或者一个java.io.InputStream:
<m:attachment value="#{person.photo}" contentType="image/png"/>
你会注意到,对一个byte[] 和一个java.io.InputStream ,你需要指定附加的MIME类型 (与信息没有作为文件的一部分被携带一样).
并且它会更好, 你可以系上Seam产生的PDF, 或者标准的JSF视图, 只用<m:attachment> 包裹你将使用的普通标签:
<m:attachment fileName="tiny.pdf">
<p:document>
A very tiny PDF
</p:document>
</m:attachment>
如果你想系上一组文件(例如从一个数据库加载一组图片),你只需用一个<ui:repeat>:
<ui:repeat value="#{people}" var="person">
<m:attachment value="#{person.photo}" contentType="image/jpeg" fileName="#{person.firstname}_#{person.lastname}.jpg"/>
</ui:repeat>
如果你想在线显示你所系上的图象:
<m:attachment
value="#{person.photo}"
contentType="image/jpeg"
fileName="#{person.firstname}_#{person.lastname}.jpg"
status="personPhoto"
disposition="inline" />
<img src="cid:#{personPhoto.contentId}" />
你可能疑惑cid:#{...}是做什么的。 好的,IETF通过设置它作为你图象的src来指定这个,在试图查找图象(Content-ID必须匹配)时,附件会被看到。— 魔术啊!
在试图访问状态对象前,你必须声明附件。
21.1.2. HTML/Text 可选部分
现今的大多数邮件阅读器支持HTML,而有些并不支持,所以你能添加一个纯文本选项到你的电子邮件主体
<m:body>
<f:facet name="alternative">Sorry, your email reader can't show our fancy email,
please go to http://labs.jboss.com/jbossseam to explore Seam.</f:facet>
</m:body>
21.1.3. 多个收件人
你经常会想要发送一个电子邮件到一群收件人(例如你的用户)。所有的收件人邮件标签都要被放置在<ui:repeat>标签内。
<ui:repeat value="#{allUsers} var="user">
<m:to name="#{user.firstname} #{user.lastname}" address="#{user.emailAddress}" />
</ui:repeat>
21.1.4. 多个消息
然而,有时,你需要发送一个稍有不同的消息到每个收件人(例如,密码重设)。做这个的最好方法就是把消息整个的放到<ui:repeat>标签中:
<ui:repeat value="#{people}" var="p">
<m:message>
<m:from name="#{person.firstname} #{person.lastname}">#{person.address}</m:from>
<m:to name="#{p.firstname}">#{p.address}</m:to>
...
</m:message>
</ui:repeat>
21.1.5. 模板
邮件模板例子显示了仅对Seam邮件标签起作用的facelets模板。
我们的template.xhtml包含:
<m:message>
<m:from name="Seam" address="do-not-reply@jboss.com" />
<m:to name="#{person.firstname} #{person.lastname}">#{person.address}</m:to>
<m:subject>#{subject}</m:subject>
<m:body>
<html>
<body>
<ui:insert name="body">This is the default body, specified by the template.</ui:insert>
</body>
</html>
</m:body>
</m:message>
我们的template.xhtml包含:
<ui:param name="subject" value="Templating with Seam Mail"/>
<ui:define name="body">
<p>This example demonstrates that you can easily use <i>facelets templating</i> in email!</p>
</ui:define>
你也可以在你的电子邮件中使用 facelets源标签,然而你必须用jar放它们在WEB-INF/lib ——当使用Seam Mail时,从web.xml 引用.taglib.xml是不可靠的。 (如果你同步发送你的邮件, Seam Mail无法访问完整的JSF或Servlet上下文, 所以不知道web.xml配置参数)。
如果你在发送邮件时需要做更多Facelets 或JSF的配置,你需要覆盖Renderer 组件并做配置编程——只为高级用户!
21.1.6. 国际化
Seam 支持发送国际化邮件。在默认时下,使用JSF提供的编码,但这可以用模板覆盖:
<m:message charset="UTF-8">
...
</m:message>
主体、主题 和接收人(和发送人) 名字会被编码。你需要确保facelets使用了正确的字符集解析你的页面,通过设置模板的编码 :
<?xml version="1.0" encoding="UTF-8"?>
21.1.7.其它标题
有时你将想要添加其它标题到你的电子邮件上。Seam提供了对此的一些支持(见21.5章:“标签“)。例如,我们可以设置电子邮件的重要性,并询问一个收条:
<m:message xmlns:m="http://jboss.com/products/seam/mail"
importance="low"
requestReadReceipt="true"/>
另外,你可以使用<m:header>标签增加一些标题到消息:
<m:header name="X-Sent-From" value="JBoss Seam"/>
21.2. 接收邮件
如果你在使用EJB,那么你就能用一个MDB(消息驱动bean)来接收电子邮件。JBoss提供一个JCA适配器—mail-ra.rar—但是随JBossAS发布的版本有一定的局限(在一些版本中没有捆绑),因此我们推荐使用随Seam发布mail-ra.rar(它在Seam包中的extras/ directory目录下)。mail-ra.rar应该被放置在$JBOSS_HOME/server/default/deploy目录下;如果你使用的JBoss AS的版本已经有了这个文件,代替它。
你可以象这样配置它:
@MessageDriven(activationConfig={
@ActivationConfigProperty(propertyName="mailServer", propertyValue="localhost"),
@ActivationConfigProperty(propertyName="mailFolder", propertyValue="INBOX"),
@ActivationConfigProperty(propertyName="storeProtocol", propertyValue="pop3"),
@ActivationConfigProperty(propertyName="userName", propertyValue="seam"),
@ActivationConfigProperty(propertyName="password", propertyValue="seam")
})
@ResourceAdapter("mail-ra.rar")
@Name("mailListener")
public class MailListenerMDB implements MailListener {
@In(create=true)
private OrderProcessor orderProcessor;
public void onMessage(Message message) {
// Process the message
orderProcessor.process(message.getSubject());
}
}
每一个收到的消息都将导致 onMessage(Message message) 被调用。 大多数Seam的注释将会在MDB内部运行,但是你不能访问持久上下文。
在http://www.jboss.org/community/docs/DOC-10032你可以查找到mail-ra.rar的在更多信息
如果你没有使用JBoss AS ,你仍然可以使用mail-ra.rar ,或者你能在你的应用程序服务器上找到一个相似的适配器。
21.3. 配置
为使你的应用程序中包含电子邮件支持,应包含jboss-seam-mail.jar在 WEB-INF/lib 目录中。 如果你在使用JBoss AS,对使用Seam的邮件支持不需要做更多的配置。否则,你需要确保你有JavaMail API、一个JavaMail API表示的实现(JBoss AS中使用的API和impl随Seam的lib/mail.jar包一起发布)和一个Java Activation Framework的拷贝(随Seam的 lib/activation.jar 包一起发布)。
注意:Seam的Email模块需要使用Facelets作为视图技术。在将来库版本中也可能会支持JSP。另外,它需要使用seam-ui包。
mailSession 组件使用JavaMail与“真实的”SMTP服务器通讯。
21.3.1. mailSession
如果你工作在JEE环境工作,可以用一个JNDI查找得到可用的JavaMail Session,或者你也可以使用Seam已配置的Session。
有关mailSession组件属性的详细描述见第31.8 节 “与邮件相关的组件”。
21.3.1.1. 用 JBoss AS的JNDI查找
JBossAS deploy/mail-service.xml配置了一个捆绑到JNDI的JavaMail session。 对你的网络可能会需要修改默认的服务配置。描述服务的详情见 http://www.jboss.org/community/docs/DOC-11056 。
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail">
<mail:mail-session session-jndi-name="java:/Mail"/>
</components>
这里我们告诉Seam从JNDI得到捆绑到java:/Mail的
邮件Session。
21.3.1.2. Seam 配置 Session
一个邮件session可以通过 components.xml被配置。 这里我们告诉Seam 使用smtp.example.com作为smtp服务器:
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail">
<mail:mail-session host="smtp.example.com"/>
</components>
21.4. Meldware
Seam的邮件例子使用Meldware (来处 buni.org) 作为邮件服务器。 Meldware 是一个组件包,提供SMTP、 POP3、 IMAP、 网页邮件、共享日历和一个图形界面的管理员工具;它以JEE应用程序方式编写,所以可以与你的Seam应用程序一起被布置到JBoss AS。
警告:随Seam发布的Meldware版本 (需要下载) 是为开发特别量身定制的——每一次应用部署时,邮箱、用户和别名(电子邮件地址)被创建。 如果你想在产品中使用Meldware,你应该从buni.org安装最新的版本。
21.5. 标签
使用http://jboss.com/products/seam/mail 命名空间的标签生成邮件。文档在消息的根部总是有message
标签。消息标签准备让Seam生成一个电子邮件。
facelets的标准模板标签可以象往常一样使用。在主体内部你可以使用 JSF标签; 如果它需要访问外部资源(样式表, javascript),那么一定要设置urlBase。
<m:message>
邮件消息的根标签
- importance — 低、正常或高。默认是正常,这是设置邮件消息重要性。
- precedence — 设置消息的优先级(例如:bulk)
- requestReadReceipt —默认为false,如果设置,一个阅读回执请求将会以发到 From: address方式的阅读回执被添加。
- urlBase — 如果设置,此值预先考虑requestContextPath,其允许你在你的邮件中使用如 <h:graphicImage> 的组件。
- messageId —明确设置Message-ID
<m:from>
- 为邮件设置来源地址。 每个电子邮件你只能设置一个。
- name — 电子邮件应来自的名字。
- address —电子邮件应来自的电子邮件地址。
<m:replyTo>
为电子邮件设置回复地址。每个电子邮件你只能设置一个。
- address —电子邮件应来自的电子邮件地址。
<m:to>
添加一个收件人到邮件。 对多个收件人使用多个<m:to> 标签。这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人名字。
- address —收件人的电子邮件地址。
<m:cc>
添加抄送人到邮件。有多个抄送人时使用多个<m:cc>标签。这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人的名字。
- address — 收件人的邮件地址。
<m:bcc>
添加一个秘文抄送人到邮件。有多个秘文抄送人时使用多个的<m:bcc>标签。 这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人的名字。
- address — 收件人的邮件地址。
<m:header>
向邮件添加一个头(例如:X-Sent-From: JBoss Seam)。
- name — 要添加的头的名字(例如:X-Sent-From)。
- value — 要添加的头的值(例如:JBoss Seam)。
<m:attachment>
添加一个附件到邮件。
- value — 要添加的附件:
o String —一个 String作为在classpath中文件的路径被解释。
o java.io.File —一个引用 File 对象的EL表达式。
o java.net.URL — 一个引用URL对象的EL表达式。
o java.io.InputStream — 一个引用 InputStream的EL表达式。 这种情况下,fileName 和 contentType 都必须指定。
o byte[] — 一个引用 byte[] 的EL表达式。 这种情况下,fileName 和 contentType 都必须指定。
如果值属性被省略:
o 如果这个标签包含一个 <p:document> 标签,这个被描述的文档将会被生成并且附加到邮件上。 fileName 应该被指定。
o 如果这个标签包含其它的JSF标签,将会根据它们生成HTML文档并附加到邮件。fileName应该被指定。
- fileName — 对使用的附件指定文件名。
- contentType —指定附件的MIME类型。
<m:subject>
设置邮件的主题。
<m:body>
设置邮件主体。支持 alternative facet,如果生成的一个HTML邮件可能包含对一个不支持html的阅读器而言的可选文本。
- type — 如果设为 plain,那么会生成一份简单文本邮件,否则将会生成一份HTML邮件。
发表评论
-
第31章. Seam内建组件
2009-05-28 11:51 1462第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1597第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1425第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1540第29章. 配置Seam和打包Seam应用程序 配置 ... -
第28章. Hibernate搜索
2009-05-26 20:17 152028.1. 介绍 如Apache Lucen ... -
第27章. Spring框架集成
2009-05-26 20:16 1398第27章. Spring框架集成 Spring集成 ... -
第26章. Seam和Google网页工具
2009-05-26 20:15 1216第26章. Seam和Google网页工具 ... -
第25章. 远程
2009-05-26 20:15 1269第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1678第24章. Web服务 Seam 集成了JBossWS, ... -
第23章. 缓存
2009-05-26 20:14 1416第23章. 缓存 在 ... -
第22章. 异步和消息
2009-05-26 20:12 2125第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第 20章. RSS支持
2009-05-26 20:10 820第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1822第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6474第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 1024第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1389第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 932第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 98215.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1431第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1403第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
第一章:Magento介绍...................................................................................................................4 Magento 的特色.....................................................
第1 章 初识Visual Basic 2010 ............ 1 1.1 事件驱动编程 .............................. 2 1.2 安装Visual Basic 2010 ................ 3 1.3 Visual Basic 2010 集成开发 环境 ....................
第一章 Windows Server 2003 系统..............................................................................................5 第一节 Windows Server 2003 系统介绍........................................
第一章 Windows Server 2003 系统..............................................................................................5 第一节 Windows Server 2003 系统介绍........................................
9.2 Email........ 126 9.3 图像......... 127 9.4 XML ........ 133 9.5 XML Web Service ..... 141 第 10 章安全性. 149 附录 155 附录 1 Microsoft Mobile Internet Toolkit 兼容设备........ 155 附录2 ...
网络营销,作为一种基于互联网的新型营销方式,是现代企业利用互联网技术和平台,以现代营销理论为基础,实现其营销目标的重要手段。它涵盖了信息收集、信息发布、销售促进、顾客服务与顾客关系管理、网址推广等多个...
【第21章】ValidateBox(验证框)组件详解 ValidateBox是EasyUI中的一个关键组件,用于实现表单验证,确保用户输入的数据符合特定的格式或规则。它依赖于Tooltip组件来显示验证提示信息。本章将详细介绍ValidateBox...
│ │ │ │ flask_email.py │ │ │ │ flask_test.py │ │ │ │ ftpClient.py │ │ │ │ ftpServer.py │ │ │ │ getIP_MAC.py │ │ │ │ index.py │ │ │ │ index1.asp │ │ │ │ pachong.py │ │...
网络营销是21世纪商业活动中不可或缺的一部分,它利用互联网技术和通信技术来实现企业的市场调查、客户分析、产品开发、销售策略制定、售后服务等多个环节。网络营销的出现源于现代电子技术的发展、消费者价值观的...
网络营销是21世纪商业活动中不可或缺的一部分,它借助互联网技术和通信技术的发展,打破了传统营销的时空界限,赋予了营销活动更多的创新可能性。网络营销的定义涵盖了利用互联网进行的各种营销活动,包括但不限于...
13. 网络主机的IP地址由32位二进制数字组成,通常被表示为4个十进制数字,每个数字0-255。 14. OSI(Open Systems Interconnection)参考模型的最底层是物理层,负责传输原始比特流。 15. 关于模板,错误的说法是...
第21章 Windows 98 第22章 Windows 98拨号网络 第23章 Windows NT 4.0 第24章 在Novell NetWare中支持IP 第七部分 使用TCP/IP应用 第25章 Whois和Finger 第26章 文件传输协议 第27章 使用Telnet 第28章 使用r系列...
第21章 Windows 98 第22章 Windows 98拨号网络 第23章 Windows NT 4.0 第24章 在Novell NetWare中支持IP 第七部分 使用TCP/IP应用 第25章 Whois和Finger 第26章 文件传输协议 第27章 使用Telnet 第28章 使用r系列...
2. 第二阶段:电子计算机(1946-1958):电子管的发明使计算机的发展进入了一个新的阶段。 3. 第三阶段:晶体管计算机(1958-1964):晶体管的发明使计算机的速度和可靠性得到了改善。 4. 第四阶段:集成电路计算机...
在SQL(Structured Query Language)数据库的学习中,第二章通常会涉及基本的数据库概念、SQL语法以及数据操作。在这个阶段,学生会被要求掌握如何创建数据库、定义数据表结构、插入数据、查询数据等核心技能。下面...
计算机经历了四个时代,其划分主要依据是计算机的“构成元件”:第一代主要元件是电子管,第二、三代分别是晶体管和集成电路。ENIAC 是第一台电子计算机的英文缩写。 2. 计算机分类 计算机可以分类为电子数字...
Ajax完全自学手册PPT和源代码分来上传了,需要PPT的请自己在我的资源里面查找。 1.本书1~22章所附代码的...第21章(\C11) Thirf 电视节目预告 Thirf 翻译模块 第22章(\C11) Advertisement 内文广告系统
第21章 电影播放器 第22章 AVI视频制作编程 第23章 文字语音朗读编程 第24章 浏览EXE或DLL文件的所有图标 第25章 BMP位图操作 第26章 滚动浏览位图 第27章 透明位图背景上的滚动字幕实例 第28章 小波算法的VC实现 第...
第21章 电影播放器 第22章 AVI视频制作编程 第23章 文字语音朗读编程 第24章 浏览EXE或DLL文件的所有图标 第25章 BMP位图操作 第26章 滚动浏览位图 第27章 透明位图背景上的滚动字幕实例 第28章 小波算法的VC实现 第...