org.apache.commons.mail.MultiPartEmail发送空主体的电子邮件

时间:2014-10-09 15:50:55

标签: java version javax.mail apache-commons-email

发送电子邮件org.apache.commons.mail.MultiPartEmail.send()会发送包含空主体的电子邮件。我尝试过commons-email 1.2,1.3.1,1.3.3。 Java 1.7.0_55是最早导致空邮件正文的版本。

1 个答案:

答案 0 :(得分:1)

根据http://www.oracle.com/technetwork/java/javase/7u55-relnotes-2177812.html#knownissues-7u55 初始化SAAJ组件后,javax.mail库可能无法在某些情况下工作,这反过来可能会破坏javax.mail的JAF设置。 一种可能的解决方法是在使用javax.mail API之前重新添加javax.mail处理程序:

MailcapCommandMap mailMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mailMap.
    addMailcap("multipart/mixed;;x-java-content-handler=com.sun.mail.handlers.multipart_mixed");"

调用new AttachmentPartImpl();是某种情况之一。

在申请中

com.sun.xml.internal.messaging.saaj.soap.MessageImpl.createAttachmentPart()
在发送电子邮件之前调用

。 它只会返回新的AttachmentPartImpl();其中包含headers = new MimeHeaders(); 调用新的MimeHeaders()不足以使空体发生。调用new AttachmentPartImpl();在发送邮件之前导致空体。 在使用javax.mail API之前重新添加javax.mail处理程序解决了这个问题。

MultiPartEmail email = new MultiPartEmail();
email.setHostName(smtpServer);
email.addTo(to);
email.setFrom(from);
email.setSubject(subject);
email.setMsg(msg);
email.setSocketTimeout(20000);
email.setSocketConnectionTimeout(20000);
// SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
// soapMessage.createAttachmentPart(); // enough for empty body
new AttachmentPartImpl(); // enough for empty body
// new MimeHeaders(); not enough for empty body
email.send();