一)
通过使用mail活动节点,流程作者可以指定一个邮件信息的内容,一次发送给多个收件人,每个email信息都是从一个模板产生,当然里面可以设置一些时变的变量如${person},然后在流程启动之前将给这个变量赋值,并且放到variables集中,模板可能在流程定义jpdl中,也可以是引用外部模板,如果没有,则默认使用jbpm-default-cfg.xml的<process-engine-context>部分指定的模板,下面针对mail节点说明其各属性:
元素 |
个数 |
描述 |
from |
0-1 |
发件者列表 |
to |
1 |
主要收件人列表 |
cc |
0-1 |
抄送收件人列表 |
bcc |
0-1 |
密送收件人列表 |
subject |
1 |
邮件主题 |
text |
0-1 |
邮件文字内容 |
html |
0-1 |
邮件的html内容 |
attachments |
0-1 |
附件可以指定url,classpath资源或本地文件 |
示例:
<task g="134,311,92,52" name="review" assignee="${owner}">
<transition g="-47,-17" name="to end" to="end"/>
</task>
<mail g="0,0,80,40" name="send rectify note">
<to addresses="${toEmail}"/>
<subject>通知${person}</subject>
<text>一个新通知</text>
<transition to="end"></transition>
</mail>
<end g="131,479,48,48" name="end"/>
Ps:在默认安装配置下的src目录下有一个jbpm.mail.properties文件,它是用来指定邮件服务器信息的,如果不想使用本地邮件服务器localhost,想要使用其他邮件服务器,可以使用比如:smtp.163.com,则可以修改mail.smtp.host=smtp.163.com;
二)
在任务中支持e-mail
可以为分配人提供一个提醒,当一个任务被加入到他们的任务列表,以及在特定的时间间隔进行提醒,每个email信息也是根据模板产生得,模板设置同上。
在task元素下提供两个email提醒子元素:
元素名 |
个数 |
描述 |
Notification |
0-1 |
让一个任务被分配的时候发送一个提醒消息。 如果没有引用模板,也没有提供内部的模板, mail会使用task-notification名字的模板。 |
reminder |
0-1 |
根据指定的时间间隔发送提醒信息。 如果没有引用模板,也没有提供内部模板, mail会使用task-reminder名字的模板。 |
Notification属性:
属性 |
类型 |
默认值 |
是否必填 |
描述 |
Continue |
{sync|async|exclusive} |
Sync |
可选 |
指定在发送提醒邮件后, 是不是产生一个异步执行。 |
Reminder属性:
属性 |
类型 |
默认值 |
是否必填 |
描述 |
duedate |
持续时间(纯字符串或包含表达式) |
|
必填 |
在reminder email发送前的延迟时间。 |
|
|
|
可选 |
在一个序列reminder email发送后延迟的时间 |
|
{sync | async | exclusive} |
sync |
可选 |
指定在发送提醒邮件后, 是不是产生一个异步执行。 |
示例:
<task name="review" assignee="#{order.owner}"
<notification/>
<reminder duedate="2 days" repeat="1 day"/>
</task>
ps2:邮件发送时,要自己写一个验证类extends Authenticator,否则报错,需要一个额外的jar包subethasmtp-smtp-1.2.jar,由于该类是我们自己添加的,所以我们必须在配置文件中加注一下,找到jbpm-default-cfg.xml:
<mail-session>
<mail-server>
<session-properties resource="jbpm.mail.properties" />
<authenticator class="mail.MyAuthenticator" />
</mail-server>
贴上我的MyAuthenticator类:
package mail; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator { String userName=null; String password=null; public MyAuthenticator(){ } public MyAuthenticator(String username, String password) { this.userName = username; this.password = password; } protected PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication("xuhaifeng19890815", "******"); } }
我们也可以自己编辑我们想要的模板,我们可以自己编写模板,因为在jbpm-cfg.xml中已经为我们配置好了jbpm-default-cfg.xml,如果我们不特殊指明,则会使用jbpm源码中默认的模板。
这是个不错的功能,在有些时候或许能给我们带来很大的方便。