我们使用Java Mail通过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)
。这些解决方案都没有带领我们取得成功。有人知道吗
解决这个问题的解决方案或新的解决方案流程?
答案 0 :(得分:2)
我们遇到了类似的问题,我们将文件附件从J2EE应用程序发送到各种邮件帐户。我们使用SMTP gmail服务器(smtp.gmail.com),端口465和HTTPS连接类型用于传出消息。
通过Java发送的邮件的附件未在Outlook中显示,但我们可以在gb帐户的网络界面中观察它们。
在我们的案例中,结果证明MimeMultipart
构造不正确。我们有
Multipart multipart = new MimeMultipart("alternative");
当我们将其修改为
时Multipart multipart = new MimeMultipart();
附件变得可见。
请参阅the following resource以获取完整说明。
答案 1 :(得分:1)
如果从其他邮件程序发送的邮件正常工作且只有从JavaMail发送的邮件失败,您将需要检查工作和非工作邮件的原始MIME内容,以查看不同的内容。您应该能够使用JavaMail重现任何可用的内容。
有很多方法可以访问邮件的原始MIME内容;如果你需要帮助,请告诉我。
显然,您需要具有相似内容的工作和非工作示例消息进行比较。如果你有一个可重复的测试用例 - 你可以多次发送给同一个收件人并且每次都失败的消息 - 这将是最有帮助的。
答案 2 :(得分:0)
我想添加评论(问题),但没有必要的分数。
它可能是客户端的过滤器阻止附件。通过正常的Outlook发送邮件时,查看客户是否收到带附件的邮件(相同的pdf)。
第二个可能的原因是附件的大小对于客户来说是个问题。
第三个可能的原因是我注意到当我设置规则以自动将消息放入不同的文件夹时,我看到一条消息说:
此消息中已禁用链接和其他功能。要启用该功能,请将此消息移至收件箱。 Outlook阻止访问可能不安全的附件:xxxx.pdf
也许这位客户已经设置了类似的规则。