/** * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.process.workitem.email; import java.util.Arrays; import org.jbpm.process.workitem.AbstractLogOrThrowWorkItemHandler; import org.kie.api.runtime.process.WorkItem; import org.kie.api.runtime.process.WorkItemManager; /** * WorkItemHandler for sending email. * * Expects the following parameters: * - "From" (String): sends an email from the given the email address * - "To" (String): sends the email to the given email address(es), * multiple addresses must be separated using a semi-colon (';') * - "Subject" (String): the subject of the email * - "Body" (String): the body of the email (using HTML) * Is completed immediately and does not return any result parameters. * * Sending an email cannot be aborted. * */ public class EmailWorkItemHandler extends AbstractLogOrThrowWorkItemHandler { private Connection connection; public EmailWorkItemHandler() { } public EmailWorkItemHandler(String host, String port, String userName, String password) { setConnection(host, port, userName, password); } public EmailWorkItemHandler(String host, String port, String userName, String password, String startTls) { setConnection(host, port, userName, password, startTls); } public void setConnection(String host, String port, String userName, String password) { connection = new Connection(); connection.setHost(host); connection.setPort(port); connection.setUserName(userName); connection.setPassword(password); } public void setConnection(String host, String port, String userName, String password, String startTls) { connection = new Connection(); connection.setHost(host); connection.setPort(port); connection.setUserName(userName); connection.setPassword(password); connection.setStartTls(Boolean.parseBoolean(startTls)); } public Connection getConnection() { return connection; } public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { if (connection == null) { throw new IllegalArgumentException("Connection not initialized for Email"); } try { Email email = createEmail(workItem, connection); SendHtml.sendHtml(email, getDebugFlag(workItem)); // avoid null pointer when used from deadline escalation handler if (manager != null) { manager.completeWorkItem(workItem.getId(), null); } } catch (Exception e) { handleException(e); } } protected static Email createEmail(WorkItem workItem, Connection connection) { Email email = new Email(); Message message = new Message(); message.setFrom((String) workItem.getParameter("From")); message.setReplyTo( (String) workItem.getParameter("Reply-To")); // Set recipients Recipients recipients = new Recipients(); String to = (String) workItem.getParameter("To"); if ( to == null || to.trim().length() == 0 ) { throw new RuntimeException( "Email must have one or more to adresses" ); } for (String s: to.split(";")) { if (s != null && !"".equals(s)) { Recipient recipient = new Recipient(); recipient.setEmail(s); recipient.setType( "To" ); recipients.addRecipient(recipient); } } // Set cc String cc = (String) workItem.getParameter("Cc"); if ( cc != null && cc.trim().length() > 0 ) { for (String s: cc.split(";")) { if (s != null && !"".equals(s)) { Recipient recipient = new Recipient(); recipient.setEmail(s); recipient.setType( "Cc" ); recipients.addRecipient(recipient); } } } // Set bcc String bcc = (String) workItem.getParameter("Bcc"); if ( bcc != null && bcc.trim().length() > 0 ) { for (String s: bcc.split(";")) { if (s != null && !"".equals(s)) { Recipient recipient = new Recipient(); recipient.setEmail(s); recipient.setType( "Bcc" ); recipients.addRecipient(recipient); } } } // Fill message message.setRecipients(recipients); message.setSubject((String) workItem.getParameter("Subject")); message.setBody((String) workItem.getParameter("Body")); // fill attachments String attachmentList = (String) workItem.getParameter("Attachments"); if (attachmentList != null) { String[] attachments = attachmentList.split(","); message.setAttachments(Arrays.asList(attachments)); } // setup email email.setMessage(message); email.setConnection(connection); return email; } public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) { // Do nothing, email cannot be aborted } protected boolean getDebugFlag(WorkItem workItem) { Object debugParam = workItem.getParameter("Debug"); if (debugParam == null) { return false; } return Boolean.parseBoolean(debugParam.toString()); } }