提交 4b17821b 编写于 作者: T Tijs Rademakers

Added patch provided by conradi via the Activiti forum

上级 47bac4ff
......@@ -26,6 +26,8 @@ import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.SimpleEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Joram Barrez
......@@ -36,6 +38,8 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
private static final long serialVersionUID = 1L;
private static final Logger LOG = LoggerFactory.getLogger(MailActivityBehavior.class);
protected Expression to;
protected Expression from;
protected Expression cc;
......@@ -46,39 +50,47 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
protected Expression html;
protected Expression htmlVar;
protected Expression charset;
protected Expression ignoreException;
protected Expression exceptionVariableName;
public void execute(ActivityExecution execution) {
String toStr = getStringFromField(to, execution);
String fromStr = getStringFromField(from, execution);
String ccStr = getStringFromField(cc, execution);
String bccStr = getStringFromField(bcc, execution);
String subjectStr = getStringFromField(subject, execution);
String textStr = textVar == null ? getStringFromField(text, execution)
: getStringFromField(getExpression(execution, textVar), execution);
String htmlStr = htmlVar == null ? getStringFromField(html, execution)
: getStringFromField(getExpression(execution, htmlVar), execution);
String charSetStr = getStringFromField(charset, execution);
Email email = createEmail(textStr, htmlStr);
addTo(email, toStr);
setFrom(email, fromStr);
addCc(email, ccStr);
addBcc(email, bccStr);
setSubject(email, subjectStr);
setMailServerProperties(email);
setCharset(email, charSetStr);
boolean doIgnoreException = Boolean.parseBoolean(getStringFromField(ignoreException, execution));
String exceptionVariable = getStringFromField(exceptionVariableName, execution);
Email email = null;
try {
String toStr = getStringFromField(to, execution);
String fromStr = getStringFromField(from, execution);
String ccStr = getStringFromField(cc, execution);
String bccStr = getStringFromField(bcc, execution);
String subjectStr = getStringFromField(subject, execution);
String textStr = textVar == null ? getStringFromField(text, execution)
: getStringFromField(getExpression(execution, textVar), execution);
String htmlStr = htmlVar == null ? getStringFromField(html, execution)
: getStringFromField(getExpression(execution, htmlVar), execution);
String charSetStr = getStringFromField(charset, execution);
email = createEmail(textStr, htmlStr);
addTo(email, toStr);
setFrom(email, fromStr);
addCc(email, ccStr);
addBcc(email, bccStr);
setSubject(email, subjectStr);
setMailServerProperties(email);
setCharset(email, charSetStr);
email.send();
} catch (ActivitiException e) {
handleException(execution, e.getMessage(), e, doIgnoreException, exceptionVariable);
} catch (EmailException e) {
throw new ActivitiException("Could not send e-mail", e);
handleException(execution, "Could not send e-mail in execution " + execution.getId(), e, doIgnoreException, exceptionVariable);
}
leave(execution);
}
protected Email createEmail(String text, String html) {
if (html != null) {
return createHtmlEmail(text, html);
......@@ -222,7 +234,7 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
}
protected String getStringFromField(Expression expression, DelegateExecution execution) {
if(expression != null) {
if (expression != null) {
Object value = expression.getValue(execution);
if(value != null) {
return value.toString();
......@@ -237,4 +249,18 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
.createExpression(variable);
}
protected void handleException(ActivityExecution execution, String msg, Exception e, boolean doIgnoreException, String exceptionVariable) {
if (doIgnoreException) {
LOG.info("Ignoring email send error: " + msg, e);
if (exceptionVariable != null && exceptionVariable.length() > 0) {
execution.setVariable(exceptionVariable, msg);
}
} else {
if (e instanceof ActivitiException) {
throw (ActivitiException) e;
} else {
throw new ActivitiException(msg, e);
}
}
}
}
......@@ -26,6 +26,7 @@ import javax.activation.DataHandler;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.util.CollectionUtil;
import org.activiti.engine.test.Deployment;
import org.subethamail.wiser.WiserMessage;
......@@ -115,6 +116,30 @@ public class EmailSendTaskTest extends EmailTestCase {
assertEmailSend(messages.get(0), true, "Test", "Mr. <b>Kermit</b>", "activiti@localhost", Arrays.asList("kermit@activiti.org"), null);
}
@Deployment
public void testInvalidAddress() throws Exception {
try {
runtimeService.startProcessInstanceByKey("invalidAddress").getId();
fail("An Invalid email address should not execute");
} catch(ActivitiException e) {
// fine
} catch(Exception e) {
fail("Only an ActivitiException is expected here but not: " + e);
}
}
@Deployment
public void testInvalidAddressWithoutException() throws Exception {
String piId = runtimeService.startProcessInstanceByKey("invalidAddressWithoutException").getId();
assertNotNull(historyService.createHistoricVariableInstanceQuery().processInstanceId(piId).variableName("emailError").singleResult());
}
@Deployment
public void testInvalidAddressWithoutExceptionVariableName() throws Exception {
String piId = runtimeService.startProcessInstanceByKey("invalidAddressWithoutException").getId();
assertNull(historyService.createHistoricVariableInstanceQuery().processInstanceId(piId).variableName("emailError").singleResult());
}
// Helper
private void assertEmailSend(WiserMessage emailMessage, boolean htmlMail, String subject, String message,
......
......@@ -26,6 +26,7 @@ import javax.activation.DataHandler;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.util.CollectionUtil;
import org.activiti.engine.test.Deployment;
import org.subethamail.wiser.WiserMessage;
......@@ -128,6 +129,30 @@ public class EmailServiceTaskTest extends EmailTestCase {
assertEmailSend(messages.get(0), true, "Test", "Mr. <b>Kermit</b>", "activiti@localhost", Arrays.asList("kermit@activiti.org"), null);
}
@Deployment
public void testInvalidAddress() throws Exception {
try {
runtimeService.startProcessInstanceByKey("invalidAddress").getId();
fail("An Invalid email address should not execute");
} catch(ActivitiException e) {
// fine
} catch(Exception e) {
fail("Only an ActivitiException is expected here but not: " + e);
}
}
@Deployment
public void testInvalidAddressWithoutException() throws Exception {
String piId = runtimeService.startProcessInstanceByKey("invalidAddressWithoutException").getId();
assertNotNull(historyService.createHistoricVariableInstanceQuery().processInstanceId(piId).variableName("emailError").singleResult());
}
@Deployment
public void testInvalidAddressWithoutExceptionVariableName() throws Exception {
String piId = runtimeService.startProcessInstanceByKey("invalidAddressWithoutException").getId();
assertNull(historyService.createHistoricVariableInstanceQuery().processInstanceId(piId).variableName("emailError").singleResult());
}
// Helper
public static void assertEmailSend(WiserMessage emailMessage, boolean htmlMail, String subject, String message,
......
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="simpleTextOnly" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="invalidAddressWithoutException" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="ignoreException" stringValue="true" />
<activiti:field name="exceptionVariableName" stringValue="emailError" />
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="invalidAddressWithoutException" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="ignoreException" stringValue="true" />
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="simpleTextOnly" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="invalidAddressWithoutException" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="ignoreException" stringValue="true" />
<activiti:field name="exceptionVariableName" stringValue="emailError" />
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="invalidAddressWithoutException" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<sendTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="ignoreException" stringValue="true" />
<activiti:field name="to">
<activiti:string>kermit@activiti.org@org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Hello Kermit!</activiti:string>
</activiti:field>
<activiti:field name="text">
<activiti:string>This a text only e-mail.</activiti:string>
</activiti:field>
</extensionElements>
</sendTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册