JavaMail-JBPM4

Java发邮件的用户名有时候不能使用带后缀的用户名。

使用jbpm时jbpm.mail.preperties有以下几组配置


#Gmail
#mail.smtp.host=smtp.gmail.com
#mail.smtp.port=25
#mail.from=herosea &at gmail &dot com
#mail.debug=true
#mail.smtp.starttls.enable=true
#mail.smtp.auth=true


如果设置了mail.smtp.user不设mail.from则发送的地址设为 ${mail.smtp.user}@机器名。
mail.from不是可以验证的邮件地址时会报错。
mail.debug=true在调试时可以看到准确的原因。


jbpm.default.cfg.xml中添加如下段

<mail-session>
<mail-server>
<!-- address-filter>
<include>.+@.company.com.cn</include>
</address-filter-->
<session-properties resource="jbpm.mail.properties" />
<authenticator class="com.impl.TestAuthenticator">
<field name="userName"><string value="yourname"/></field>
<field name="password"><string value="*****"/></field>
</authenticator>
</mail-server>
</mail-session>


TestAuthenticator.java文件

package com.service.impl;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
* @author test
* 简单的实现认证接口
*/
public class TestAuthenticator extends Authenticator {

private String userName;

private String password;

private PasswordAuthentication passwordAuthentication;

public TestAuthenticator() {
super();
// TODO Auto-generated constructor stub
}

public TestAuthenticator(String userName, String password) {
setUserName(userName);
setPassword(password);
}

public void setUserName(String userName) {
this.userName = userName;
}

public void setPassword(String password) {
this.password = password;
}

protected PasswordAuthentication getPasswordAuthentication() {
if(passwordAuthentication == null){
passwordAuthentication = new PasswordAuthentication(userName, password);
}
return passwordAuthentication;
}
}


配置的工作流

<mail g='200,98,90,50' name='测试邮件节点'>
<to addresses='grandsea2010@gmail.com'/>
<subject>Hello</subject>
<html>没有什么原因啊!html</html>
<transition g='306,123;306,59:0,-1' to='人工 1'/>
</mail>

发出的邮件正文为乱码。
可以修改jbpm的源码
org.jbpm.pvm.internal.email.impl.MailProducerImpl
将 htmlPart.setContent(html, "text/html"); 改为 htmlPart.setContent(html, "text/html;charset=gbk");

<mail-session>貌似不能出现在两个jbpm配置文件中

jbpm4的流程文件没有定义格式是因为可以完全自定义,在解析的时候可以复用JpdlParser中的邮件解析,定时器解析等等。

jbpm4的事件模型还看不明白。
自定义MailProducer很麻烦,mailTemplate尤其是inline的不会自动注入到MailProducer中。

TaskRemind
这个每隔一段时间提醒一次的事件原理是这样的。
在ObservableElementImpl上获得remind事件 event,
新建一个MailListener叫eventListener,并将其和remind事件关联event.createEventListenerReference(eventListener)。
scopeElement.createTimerDefinition()创建一个定时器timerDefinition,从xml中获取定时器的详细配置。
timerDefinition.setEventName(Event.REMIND)定时触发remind事件。

正则表达式的上下文由多个上下文组成
ExecutionContext是默认最高优先级的上下文,可以自定义一个放在其前面。MailListener就定义了TaskContext至于其前面。

jbpm内部定义的很多接口是给其他流程定义语言准备的,要换的话可能需要整套都换掉。(猜测)

可能正则表达式的Context也是jbpm的context。(猜测)

发短信接口实现(猜想):
仿照org.jbpm.pvm.internal.wire.binding.MailTemplateBinding解析一个短信模板。
仿照邮件包org.jbpm.pvm.internal.email.spi中的接口定义发短信的3个接口。

自定义binding要注意的两个方面:
jbpm.user.wire.binding.xml文件在src目录下,不在任何包内。
集成WireDescriptorBinding的类需要一个没有参数的构造函数。
我为发短信定义了mobile-template标签,他的name属性的取值不能和mail-template的一样,否则会出错。说是上下文中找不到我模板的注册类。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值