第 12 章 e-Mail 支持
本章描述了 JPDL 中提供的"开箱即用"电子邮件支持。阅读此信息以了解如何配置邮件功能的不同方面。
12.1. JPDL 中的邮件 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
可以通过两种方式指定从进程发送电子邮件的时间点。
12.1.1. 邮件操作 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如果原因没有 将电子邮件显示为进程图中的节点,请使用邮件操作。
注意
可将 mail 操作添加到可添加正常操作的任意位置。
<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />
<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />
将 subject 和 text 属性指定为类似如下的元素:
<mail actors="#{president}" > <subject>readmylips</subject> <text>nomoretaxes</text> </mail>
<mail actors="#{president}" >
<subject>readmylips</subject>
<text>nomoretaxes</text>
</mail>
每个字段都可以包含类似于 JSF 的表达式:
<mail to='#{initiator}' subject='websale' text='your websale of #{quantity} #{item} was approved' />
<mail
to='#{initiator}'
subject='websale'
text='your websale of #{quantity} #{item} was approved' />
注意
要了解更多有关表达式的信息,请参阅 第 14.3 节 “ 表达式 ”。
两个属性指定接收者: actors 和 to。to 属性应该将"resolve"到一个分号分隔的电子邮件地址列表。actors 属性应该解析为冒号分隔的 actorIds 列表。这些 actorIds 将依次解析为电子邮件地址。(详情请参阅 第 12.3.3 节 “ 地址解决 ”。)
<mail to='admin@mycompany.com' subject='urgent' text='the mailserver is down :-)' />
<mail
to='admin@mycompany.com'
subject='urgent'
text='the mailserver is down :-)' />
注意
要了解如何指定接收者,请阅读 第 12.3 节 “ 指定 E-Mail Recipients ”
e-Mails 可以通过使用模板来定义。以这种方式覆盖模板属性:
<mail template='sillystatement' actors="#{president}" />
<mail template='sillystatement' actors="#{president}" />
注意
通过阅读来了解更多有关模板的信息 第 12.4 节 “ e-Mail 模板 ”
12.1.2. 邮件节点 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
与邮件操作一样,发送电子邮件的操作可以建模为节点。在这种情况下,运行时行为将相同,但电子邮件将显示为 进程图形中 的节点。
邮件节点支持与
邮件操作
完全相同的属性和元素。(请参阅 第 12.1.1 节 “ 邮件操作 ” 了解更多信息。)
重要
始终确保邮件节点只有一个 离开 转换。
12.1.3. "task Assigned" E-Mail 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当任务分配给执行者时,可以发送电子邮件。要配置这个功能,请使用以下方法将
notify="yes"
属性添加到任务中:
<task-node name='a'> <task name='laundry' swimlane="grandma" notify='yes' /> <transition to='b' /> </task-node>
<task-node name='a'>
<task name='laundry' swimlane="grandma" notify='yes' />
<transition to='b' />
</task-node>
将 notify 设置为
yes
、true
或 on
,使业务进程管理器向分配给任务的执行者发送电子邮件。(请注意,此电子邮件基于模板,包含指向 Web 应用程序任务页面的链接。)
12.1.4. "task Reminder" E-Mail 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
e-Mails 可以作为任务提醒发送。JPDL 的 reminder 元素利用计时器。最常用的属性是 duedate 和 repeat。请注意,不需要指定操作。
12.2. 邮件中的表达式 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
用户可以使用表达式中的以下变量: swimlanes、process variables 和 transient variables beans。通过
jbpm.cfg.xml
文件配置它们。
表达式可与 地址解析功能结合使用。(如需更多信息,请参阅 第 12.3.3 节 “ 地址解决 ”。)
这个示例预先存在名为 documentation 的 swimlane
:
<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />
<mail actors="#{president}"
subject="readmylips"
text="nomoretaxes" />
代码将向负责该特定进程执行的人员发送电子邮件。
12.3. 指定 E-Mail Recipients 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
12.3.1. 多接收者 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
可以在 actors 和 to 字段中列出多个接收者。使用冒号或分号分隔列表中的项目。
12.3.2. 将 E-Mail 发送到 BCC 地址 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要将信息发送到 Blind\":\"bon Copy (BCC)接收者,请使用进程定义中的 bccActors 或 bcc 属性。
<mail to='#{initiator}' bcc='bcc@mycompany.com' subject='websale' text='your websale of #{quantity} #{item} was approved' />
<mail to='#{initiator}'
bcc='bcc@mycompany.com'
subject='websale'
text='your websale of #{quantity} #{item} was approved' />
另一种方法是始终将 BCC 消息发送到
jbpm.cfg.xml
中集中配置的一些位置。这个示例演示了如何进行此操作:
<jbpm-configuration> ... <string name="jbpm.mail.bcc.address" value="bcc@mycompany.com" /> </jbpm-configuration>
<jbpm-configuration>
...
<string name="jbpm.mail.bcc.address" value="bcc@mycompany.com" />
</jbpm-configuration>
12.3.3. 地址解决 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在 Business Process Manager 中,执行者被
actorIds
引用。这些是用于识别流程参与的字符串。地址解析器 将 actorIds
转换为电子邮件地址。
使用属性 actors 应用地址解析。相反,如果直接添加地址,请使用 to 属性,因为它不会运行应用地址解析。
确保地址解析器实现以下接口:
public interface AddressResolver extends Serializable { Object resolveAddress(String actorId); }
public interface AddressResolver extends Serializable {
Object resolveAddress(String actorId);
}
地址解析器将返回以下三种类型之一:字符串、字符串集合或字符串数组。(字符串必须始终代表给定
actorId
的电子邮件地址。)
确保地址解析器实施是 bean。此 bean 必须在名为
jbpm.mail.address.resolver
的 jbpm.cfg.xml
文件中配置,如下例所示:
<jbpm-configuration> <bean name='jbpm.mail.address.resolver' class='org.jbpm.identity.mail.IdentityAddressResolver' singleton='true' /> </jbpm-configuration>
<jbpm-configuration>
<bean name='jbpm.mail.address.resolver'
class='org.jbpm.identity.mail.IdentityAddressResolver'
singleton='true' />
</jbpm-configuration>
商业进程管理器
的身份
组件包含一个地址解析器。此地址解析器将查找给定的 actorId
用户。如果用户存在,则返回其电子邮件地址。如果没有,则返回 null。
注意
要了解更多有关身份组件的信息,请参阅 第 8.11 节 “ Identity 组件 ”。
12.4. e-Mail 模板 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
而不必使用
processdefinition.xml
文件来指定电子邮件,一个可以使用模板。在这种情况下,每个字段仍可以被 processdefinition.xml
覆盖。指定如下模板:
可以在邮件模板中定义额外变量,这些变量将在表达式中可用。
通过
jbpm.cfg.xml
配置包含模板的资源,如下所示:
<jbpm-configuration> <string name="resource.mail.templates" value="jbpm.mail.templates.xml" /> </jbpm-configuration>
<jbpm-configuration>
<string name="resource.mail.templates" value="jbpm.mail.templates.xml" />
</jbpm-configuration>
12.5. 邮件服务器配置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
通过在
jbpm.cfg.xml
文件中设置 jbpm.mail.smtp.host 属性来配置邮件服务器,如下例所示:
<jbpm-configuration> <string name="jbpm.mail.smtp.host" value="localhost" /> </jbpm-configuration>
<jbpm-configuration>
<string name="jbpm.mail.smtp.host" value="localhost" />
</jbpm-configuration>
另外,当需要更多属性时,请以这种方式授予对属性文件的资源引用:
<jbpm-configuration> <string name='resource.mail.properties' value='jbpm.mail.properties' /> </jbpm-configuration>
<jbpm-configuration>
<string name='resource.mail.properties' value='jbpm.mail.properties' />
</jbpm-configuration>
12.6. 电子邮件身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
12.6.1. 电子邮件身份验证配置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在发送电子邮件时,可以使用以下设置启用(SMTP)身份验证。
属性 | 类型 | 描述 |
---|---|---|
jbpm.mail.user |
字符串
|
用户的电子邮件地址
|
jbpm.mail.password |
字符串
|
该电子邮件地址的密码
|
jbpm.mail.smtp.starttls |
布尔值
|
是否在 SMTP 服务器中使用 STARTTLS 协议
|
jbpm.mail.smtp.auth |
布尔值
|
是否使用 SMTP 身份验证协议
|
jbpm.mail.debug |
布尔值
|
是否将 javax.mail.Session 实例设置为 debug 模式
|
12.6.2. 电子邮件身份验证逻辑 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下逻辑适用于上述属性:
如果未设置 jbpm.mail.user 或 jbpm.mail.password 属性,无论设置其他设置是什么,都不会使用身份验证。
如果设置了 jbpm.mail.user 属性,则代表完成以下操作:
- mail.smtp.submitter 属性使用 jbpm.mail.user 属性的值设置
- jbpm 引擎会在发送电子邮件时尝试登录 smtp 服务器。
如果设置了 jbpm.mail.user 属性和 jbpm.mail.password 属性,则进行以下操作:
- 在这种情况下,至少设置 jbpm.mail.user 时的所有内容都会被完成
- mail.smtp.auth 属性设为 true,无论 jbpm.mail.smtp.auth 属性的值是什么
12.7. "来自"地址配置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
From
address 字段 jbpm@noreply
的默认值。使用键 jbpm.mail.from.address
通过 jbpm.xfg.xml
文件进行配置,如下所示:
<jbpm-configuration> <string name='jbpm.mail.from.address' value='jbpm@yourcompany.com' /> </jbpm-configuration>
<jbpm-configuration>
<string name='jbpm.mail.from.address' value='jbpm@yourcompany.com' />
</jbpm-configuration>
12.8. 自定义 E-Mail 支持 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
所有流程管理器的电子邮件支持都集中在一个类中,即
org.jbpm.mail.Mail
。此类是 ActionHandler
实现。每当 进程
XML 中指定电子邮件时,将结果委派给 邮件
类。可以从 邮件
类继承并根据您的特定需求自定义某些行为。要将类配置为用于邮件委派,请在 jbpm.cfg.xml
中指定 jbpm.mail.class.name
配置字符串,如下所示:
<jbpm-configuration> <string name='jbpm.mail.class.name' value='com.your.specific.CustomMail' /> </jbpm-configuration>
<jbpm-configuration>
<string name='jbpm.mail.class.name'
value='com.your.specific.CustomMail' />
</jbpm-configuration>
自定义的邮件类将在解析过程中读取。操作将在引用已配置(或默认)邮件类名称的进程中配置。因此,如果更改了属性,已经部署的所有进程仍会引用旧的邮件类名称。通过发送 update 语句,直接定向到 jBPM 数据库即可更改它们。
本章详细介绍了如何配置各种电子邮件设置。现在,您可以自行配置环境