我正在尝试在电子邮件中嵌入一个链接,用于使用Java here之类的JavaMail APi在电子邮件中附加的文件。 这是我的代码:
MimeMultipart multipart = new MimeMultipart("related");
BodyPart messageBodyPart = new MimeBodyPart();
String attachment = "/path/test.pdf";
File fAtachh = new File(attachment);
String htmlText = "<a href='cid:file'>test.pdf</a>";
messageBodyPart.setContent(htmlText, "text/html");
multipart.addBodyPart(messageBodyPart);
MimeBodyPart messageBodyPartAttach = new MimeBodyPart();
try {
messageBodyPartAttach.attachFile(fAtachh);
} catch (IOException e) {
logger.info("Exception" + e.getMessage());
}
messageBodyPartAttach.setContentID("<file>");
multipart.addBodyPart(messageBodyPartAttach);
message.setContent(multipart);
问题是链接不起作用:
如果通过以下方式更改最后一个代码:
MimeMultipart multipart = new MimeMultipart("related");
MimeBodyPart messageBodyPart = new MimeBodyPart();
String attachment = "/path/test.pdf";
String htmlText = "<a href='cid:file'>test.pdf</a>";
messageBodyPart.setContent(htmlText, "text/html");
multipart.addBodyPart(messageBodyPart);
MimeBodyPart messageBodyPartAttach = new MimeBodyPart();
DataSource fds = new FileDataSource
(attachment);
messageBodyPartAttach.setDataHandler(new DataHandler(fds));
messageBodyPartAttach.setHeader("Content-ID","<file>");
multipart.addBodyPart(messageBodyPartAttach);
message.setContent(multipart);
链接正常但文件名和扩展名错误:
我试图通过方法更改文件名:
messageBodyPartAttach.setFileName("test.pdf");
但是如果我设置了文件名,那么链接就不像第一个代码那样工作。
有什么建议吗?
谢谢!
答案 0 :(得分:0)
attachFile方法设置文件名并将Content-Disposition设置为ATTACHMENT。在多部分/相关消息中,您可能不希望这些设置,尽管它可能取决于您用于显示消息的邮件阅读器。
使用setContentID方法和将setHeader方法与“Content-ID”一起使用时,应该没有功能上的区别。
通常,多部分/相关消息用于允许html部分引用也包含在消息中的图像部分,并与html部分一起显示。可能没有邮件阅读器会显示与html内联的pdf文件。
也许要问的问题是,你究竟想要完成什么?
如果您只是希望pdf文件显示为具有正确文件名的附件,然后用户可以单击以保存或查看,则应使用(默认)multipart / mixed而不是multipart / related。我不确定是否有一种很好的方法可以将链接嵌入到html文本中的附件中。如果您能够使用其他邮件程序创建此类邮件,则可以检查该邮件的结构并使用JavaMail复制它。