第 12 章  e-Mail 支持


本章描述了 JPDL 中提供的"开箱即用"电子邮件支持。阅读此信息以了解如何配置邮件功能的不同方面。

12.1.  JPDL 中的邮件

可以通过两种方式指定从进程发送电子邮件的时间点。

12.1.1.  邮件操作

如果原因没有 将电子邮件显示为进程图中的节点,请使用邮件操作
注意
可将 mail 操作添加到可添加正常操作的任意位置。
<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />
Copy to Clipboard Toggle word wrap
将 subject 和 text 属性指定为类似如下的元素:
<mail actors="#{president}" >
    <subject>readmylips</subject>
    <text>nomoretaxes</text>
</mail>
Copy to Clipboard Toggle word wrap
每个字段都可以包含类似于 JSF 的表达式:
<mail
    to='#{initiator}'
    subject='websale'
    text='your websale of #{quantity} #{item} was approved' />
Copy to Clipboard Toggle word wrap
注意
要了解更多有关表达式的信息,请参阅 第 14.3 节 “ 表达式 ”
两个属性指定接收者: actorstoto 属性应该将"resolve"到一个分号分隔的电子邮件地址列表。actors 属性应该解析为冒号分隔的 actorIds 列表。这些 actorIds 将依次解析为电子邮件地址。(详情请参阅 第 12.3.3 节 “ 地址解决 ”。)
<mail 
    to='admin@mycompany.com' 
    subject='urgent'
    text='the mailserver is down :-)' />
Copy to Clipboard Toggle word wrap
注意
要了解如何指定接收者,请阅读 第 12.3 节 “ 指定 E-Mail Recipients ”
e-Mails 可以通过使用模板来定义。以这种方式覆盖模板属性:
<mail template='sillystatement' actors="#{president}" />
Copy to Clipboard Toggle word wrap
注意
通过阅读来了解更多有关模板的信息 第 12.4 节 “ e-Mail 模板 ”

12.1.2.  邮件节点

与邮件操作一样,发送电子邮件的操作可以建模为节点。在这种情况下,运行时行为将相同,但电子邮件将显示为 进程图形中 的节点。
邮件节点支持与 邮件操作 完全相同的属性和元素。(请参阅 第 12.1.1 节 “ 邮件操作 ” 了解更多信息。)
<mail-node  name="send email" 
            to="#{president}"
            subject="readmylips" 
            text="nomoretaxes">
    <transition to="the next node" />
</mail-node>
Copy to Clipboard Toggle word wrap
重要
始终确保邮件节点只有一个 离开 转换。

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>
Copy to Clipboard Toggle word wrap
将 notify 设置为 yestrueon,使业务进程管理器向分配给任务的执行者发送电子邮件。(请注意,此电子邮件基于模板,包含指向 Web 应用程序任务页面的链接。)

12.1.4.  "task Reminder" E-Mail

e-Mails 可以作为任务提醒发送。JPDL 的 reminder 元素利用计时器。最常用的属性是 duedaterepeat。请注意,不需要指定操作。
<task-node name='a'>
    <task name='laundry' swimlane="grandma" notify='yes'>
        <reminder duedate="2 business days" repeat="2 business hours"/>
    </task>
    <transition to='b' />
</task-node>
Copy to Clipboard Toggle word wrap

12.2.  邮件中的表达式

torecipientssubjecttext 字段可以包含类似于 JSF 的表达式。(有关表达式的更多信息,请参阅 第 14.3 节 “ 表达式 ”。)
用户可以使用表达式中的以下变量: swimlanesprocess variablestransient variables beans。通过 jbpm.cfg.xml 文件配置它们。
表达式可与 地址解析功能结合使用。(如需更多信息,请参阅 第 12.3.3 节 “ 地址解决 ”。)
这个示例预先存在名为 documentation 的 swimlane
<mail   actors="#{president}" 
        subject="readmylips" 
        text="nomoretaxes" />
Copy to Clipboard Toggle word wrap
代码将向负责该特定进程执行的人员发送电子邮件。

12.3.  指定 E-Mail Recipients

12.3.1. 多接收者

可以在 actorsto 字段中列出多个接收者。使用冒号或分号分隔列表中的项目。

12.3.2.  将 E-Mail 发送到 BCC 地址

要将信息发送到 Blind\":\"bon Copy (BCC)接收者,请使用进程定义中的 bccActorsbcc 属性。
<mail to='#{initiator}' 
      bcc='bcc@mycompany.com' 
      subject='websale' 
      text='your websale of #{quantity} #{item} was approved' />
Copy to Clipboard Toggle word wrap
另一种方法是始终将 BCC 消息发送到 jbpm.cfg.xml 中集中配置的一些位置。这个示例演示了如何进行此操作:
<jbpm-configuration>
    ...
    <string name="jbpm.mail.bcc.address" value="bcc@mycompany.com" />
</jbpm-configuration>
Copy to Clipboard Toggle word wrap

12.3.3.  地址解决

在 Business Process Manager 中,执行者被 actorIds 引用。这些是用于识别流程参与的字符串。地址解析器actorIds 转换为电子邮件地址。
使用属性 actors 应用地址解析。相反,如果直接添加地址,请使用 to 属性,因为它不会运行应用地址解析。
确保地址解析器实现以下接口:
public interface AddressResolver extends Serializable {
	Object resolveAddress(String actorId);
}
Copy to Clipboard Toggle word wrap
地址解析器将返回以下三种类型之一:字符串、字符串集合或字符串数组。(字符串必须始终代表给定 actorId 的电子邮件地址。)
确保地址解析器实施是 bean。此 bean 必须在名为 jbpm.mail.address.resolverjbpm.cfg.xml 文件中配置,如下例所示:
<jbpm-configuration>
    <bean name='jbpm.mail.address.resolver' 
        class='org.jbpm.identity.mail.IdentityAddressResolver' 
        singleton='true' />
</jbpm-configuration>
Copy to Clipboard Toggle word wrap
商业进程管理器 的身份 组件包含一个地址解析器。此地址解析器将查找给定的 actorId 用户。如果用户存在,则返回其电子邮件地址。如果没有,则返回 null。
注意
要了解更多有关身份组件的信息,请参阅 第 8.11 节 “ Identity 组件 ”

12.4.  e-Mail 模板

而不必使用 processdefinition.xml 文件来指定电子邮件,一个可以使用模板。在这种情况下,每个字段仍可以被 processdefinition.xml 覆盖。指定如下模板:
<mail-templates>
    <variable name="BaseTaskListURL"
        value="http://localhost:8080/jbpm/task?id=" />

    <mail-template name='task-assign'>
        <actors>#{taskInstance.actorId}</actors>
        <subject>Task '#{taskInstance.name}'</subject>
        <text><![CDATA[Hi,
Task '#{taskInstance.name}' has been assigned to you.
Go for it: #{BaseTaskListURL}#{taskInstance.id}
Thanks.
---powered by JBoss jBPM---]]></text>
    </mail-template>

    <mail-template name='task-reminder'>
        <actors>#{taskInstance.actorId}</actors>
        <subject>Task '#{taskInstance.name}' !</subject>
        <text><![CDATA[Hey,
Don't forget about #{BaseTaskListURL}#{taskInstance.id} 
Get going !
---powered by JBoss jBPM---]]></text>
    </mail-template>

</mail-templates>
Copy to Clipboard Toggle word wrap
可以在邮件模板中定义额外变量,这些变量将在表达式中可用。
通过 jbpm.cfg.xml 配置包含模板的资源,如下所示:
<jbpm-configuration>
  <string name="resource.mail.templates" value="jbpm.mail.templates.xml" />
</jbpm-configuration>
Copy to Clipboard Toggle word wrap

12.5.  邮件服务器配置

通过在 jbpm.cfg.xml 文件中设置 jbpm.mail.smtp.host 属性来配置邮件服务器,如下例所示:
<jbpm-configuration>
    <string name="jbpm.mail.smtp.host" value="localhost" />
</jbpm-configuration>
Copy to Clipboard Toggle word wrap
另外,当需要更多属性时,请以这种方式授予对属性文件的资源引用:
<jbpm-configuration>
   <string name='resource.mail.properties' value='jbpm.mail.properties' />
</jbpm-configuration>
Copy to Clipboard Toggle word wrap

12.6.  电子邮件身份验证

12.6.1.  电子邮件身份验证配置

在发送电子邮件时,可以使用以下设置启用(SMTP)身份验证。
Expand
表 12.1. jBPM 邮件身份验证属性
属性 类型 描述
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>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap
自定义的邮件类将在解析过程中读取。操作将在引用已配置(或默认)邮件类名称的进程中配置。因此,如果更改了属性,已经部署的所有进程仍会引用旧的邮件类名称。通过发送 update 语句,直接定向到 jBPM 数据库即可更改它们。
本章详细介绍了如何配置各种电子邮件设置。现在,您可以自行配置环境
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat