用了非常多的时间来解决jbpm3.2发送邮件的问题,现在记录下来,以备后患,也希望能帮助到大家,闲话不多说,开始吧。

    本书的例子采用的是高杰的《深入浅出jbpm》,版本为jbpm3.2,我本人的开发工具是myeclipse7.5.

    问题:相信读过这本书得同学都知道,他给出的发送邮件的实例是没有经过邮件系统验证的,就是没有发送方的用户名和密码。对于没有自己的邮件服务器的人员来说就面临着530 Authentication required,could not send mail这样的困扰,解决办法有两个:

    一:修改jbpm的源码,加入验证过程,并替换原来的class文件重新导入。

    二:开发自己的java mail ,将他的mail-node替换成一个简单的node并在这个action 的action里边发送邮件。

这里谈谈两种方法的解决体会:

方法一:

http://jacky6024.javaeye.com/blog/317480?page=8#comments

这是作者给出的解决方案,作为一个菜鸟,对原码的编译十分痛苦,我本人将jbpm包下所有的文件拷贝到一个工程下,并导入它提示缺少的包。

没有管其他文件的错误,我将workspace下的bin中的mail.class文件拷贝出来,并复制到了对应的jbpm-jpdl.jar包中的mail文件夹里,重新打包为zip文件(注意要打一个只有一层的包),重命名为jar,重新导入,运行。。。。。。

   结果:报错:缺少一个mail$1.class,我又重新把workspace下的bin中的mail$1.class文件拷贝出来,重复上述动作,运行。。。。。。

   结果:报错:还是530错误。

期间,我尝试各种反编译手段,在装jad的时候竟然它把我的myeclipse的配置文件删除了,后又将我的configuration文件夹下的所有文件都删除,搞得我快疯掉。

   解决未遂,放弃此方法,如果有谁解决了,麻烦指导一下。

方法二:用自己的java mail方法替换它的发邮件过程。

   步骤一:相信大家对javamail都很熟悉,我就不在这里赘述了。

   步骤二:将mail-node替换为一个普通的node,并对这个node添加action,对这个action设置hander,实现actionhander接口。

源码如下:

mailnodetest.xml:

<?xml version="1.0" encoding="UTF-8"?>

 

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="mailnodetest">

<start-state name="start-state1">

<transition to="send-mail-node1"></transition>

</start-state>

<node name="send-mail-node1">

<action name="send mail action" class="test.TestSimpleMailSender"></action>

<transition to="end-state1"></transition>

</node>

<end-state name="end-state1"></end-state>

</process-definition>

 

TestSimpleMailSender.java

这里我用sina的邮箱向外发送

package test;

 

import org.jbpm.graph.def.ActionHandler;

import org.jbpm.graph.exe.ExecutionContext;

 

import util.MailSenderInfo;

import util.SimpleMailSender;

 

@SuppressWarnings("serial")

public class TestSimpleMailSender implements ActionHandler {

public void execute(ExecutionContext executionContext) throws Exception {

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost("smtp.sina.com");

mailInfo.setMailServerPort("25");

mailInfo.setValidate(true);

mailInfo.setUserName("your name ");

mailInfo.setPassword("your password");

 

mailInfo.setFromAddress("your email@sina.com");

mailInfo.setToAddress("to email");

mailInfo.setSubject("test");

mailInfo.setContent("test");

SimpleMailSender.sendTextMail(mailInfo);

SimpleMailSender.sendHtmlMail(mailInfo);

System.out.println("OK");

}

}

javamail的代码见附件。