jbpm4 发送smtp验证的邮件
jbpm4.4中使用mail组件发邮件时如果邮件服务器要求smtp 验证用户 经过反复测试没能成功,通过观察javamail发送到需要smtp验证的服务器的代码,对比jbpm中的实现类,发现jbpm好像那个类没有实现权限验证的连接。
下面代码是经过修改后的,实现了smtp验证服务器发邮件。测试成功!
package org.jbpm.pvm.internal.email.impl;import java.util.Collection;import java.util.List;import javax.mail.Address;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.Message.RecipientType;import javax.mail.internet.InternetAddress;import org.jbpm.api.JbpmException;import org.jbpm.pvm.internal.email.spi.MailSession;public class MailSessionImpl implements MailSession {private List<MailServer>mailServers;public void send(Collection<Message> emails) {// Emails need to have the sessions populated.for (Message email : emails) {try {Address[] to = email.getRecipients(RecipientType.TO);Address[] cc = email.getRecipients(RecipientType.CC);Address[] bcc = email.getRecipients(RecipientType.BCC);for (MailServer mailServer : mailServers) {// Need to apply filter.AddressFilter addressFilter = mailServer.getAddressFilter();if (addressFilter != null) {// Set the email with the new filtered addresses.email.setRecipients(RecipientType.TO, addressFilter.filter(to));email.setRecipients(RecipientType.CC, addressFilter.filter(cc));email.setRecipients(RecipientType.BCC, addressFilter.filter(bcc));}// if sender is not present, use local addressSession mailSession = mailServer.getMailSession();if (email.getFrom() == null) {email.setFrom(InternetAddress.getLocalAddress(mailSession));}// If there is someone to send it to, then send it.Address[] recipients = email.getAllRecipients();if (recipients.length > 0) {Transport transport = mailSession.getTransport(recipients[0]);try {// transport.connect(); //原来smtp的连接服务器代码transport.connect("smtp.sina.com", "邮箱账号", "密码");transport.sendMessage(email, recipients);System.out.println("MailSessionImpl.send() ok!");} finally {transport.close();}}}} catch (MessagingException e) {throw new JbpmException("could not send email: " + email, e);}}}public List<MailServer> getMailServers() {return mailServers;}protected void setMailServers(List<MailServer> mailServers) {this.mailServers = mailServers;}}注意 transport.connect("smtp.sina.com", "邮箱账号", "密码");中使用的账号和jbpm.mail.properties
mail.smtp.host=smtp.sina.com.cnmail.from=xxxxxx@sina.commail.smtp.auth=true