0

发送电子邮件 org.apache.commons.mail.MultiPartEmail.send() 发送带有空正文的电子邮件。我尝试过使用 commons-email 1.2、1.3.1、1.3.3。Java 1.7.0_55 是导致邮件正文为空的最早版本。

4

1 回答 1

1

根据http://www.oracle.com/technetwork/java/javase/7u55-relnotes-2177812.html#knownissues-7u55 SAAJ 组件初始化后,javax.mail 库在某些情况下可能无法工作,这在turn 可能会破坏 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");"

调用新的 AttachmentPartImpl(); 是某些情况之一。

在应用程序中

com.sun.xml.internal.messaging.saaj.soap.MessageImpl.createAttachmentPart()

在发送电子邮件之前调用。它只返回 new AttachmentPartImpl(); 其中包含 headers = new MimeHeaders(); 调用 new MimeHeaders() 不足以出现空正文。调用新的 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();
于 2014-10-11T16:58:12.050 回答