我们使用 Java Mail 通过 SMTP 通过 Lotus Notes 向客户发送带有 PDF 附件的电子邮件。 前段时间我们收到通知,一些客户没有收到附件。
其中一位客户使用 Microsoft Outlook,并在他的收件箱中收到了附件标志。但当他打开 电子邮件,他没有看到附件。我们无法检查电子邮件客户端的版本 并进行客户端测试,因为我们的客户遍布全局。
如果我们的客户回复或(内部)转发电子邮件,附件将显示在收件人的电子邮件客户端中。
以下部分是受影响的Java源代码:
private static Multipart createMultipartMailWithAttachment(String messageText)
throws MessagingException {
// Message with attachments
Multipart mp = new MimeMultipart();
// Attach Text
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(messageText, UTF8, HTML);
mp.addBodyPart(mbp1);
for (File f : attachments) {
MimeBodyPart fileAttachment = new MimeBodyPart();
try {
fileAttachment.setDisposition(MimeBodyPart.ATTACHMENT);
fileAttachment.attachFile(f);
if(f.getName().toLowerCase().endsWith(PDF_EXTENSION)) {
fileAttachment.setHeader(CONTENT_TYPE, APPLICATION_PDF);
}
} catch (IOException e) {
returnMessage = e.getMessage();
}
mp.addBodyPart(fileAttachment);
}
return mp;
}
我们已经测试了不同的网络邮件服务,例如 gmail.com、yahoo.com 和 Outlook.com。在每种情况下 显示了附件。也可在 Mozilla Thunderbird、Microsoft Outlook 或 Lotus Notes 的本地安装中 是显示的附件吗?
经过多次询问,我们得到了许多不同的解决方案流程。请参阅 setDisposition(MimeBodyPart.ATTACHMENT) 和
setHeader(CONTENT_TYPE, APPLICATION_PDF)
。这些解决方案都没有使我们取得成功。有人知道吗
解决该问题的解决方案或新的解决方案流程?
最佳答案
我们遇到了类似的问题,我们将文件附件从 J2EE 应用程序发送到各个邮件帐户。我们使用端口 465 和 HTTPS 连接类型的 SMTP gmail 服务器 (smtp.gmail.com) 来发送邮件。
通过 Java 发送的消息的附件未在 Outlook 中显示,但我们可以在 Gmail 帐户的 Web 界面中观察到它们。
在我们的例子中,事实证明 MimeMultipart
构造不正确。我们有
Multipart multipart = new MimeMultipart("alternative");
当我们将其修改为
Multipart multipart = new MimeMultipart();
附件变得可见。
另请参阅the following resource以获得完整的解释。
关于Java 邮件附件未在 Outlook 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405511/