使用JavaMail在附加文件的电子邮件中嵌入链接不起作用

时间:2016-09-16 09:39:38

标签: java email javamail email-attachments

我正在尝试在电子邮件中嵌入一个链接,用于使用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);

问题是链接不起作用:

ErrorLink

如果通过以下方式更改最后一个代码:

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);

链接正常但文件名和扩展名错误:

WrongFileName

我试图通过方法更改文件名:

messageBodyPartAttach.setFileName("test.pdf");

但是如果我设置了文件名,那么链接就不像第一个代码那样工作。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

attachFile方法设置文件名并将Content-Disposition设置为ATTACHMENT。在多部分/相关消息中,您可能不希望这些设置,尽管它可能取决于您用于显示消息的邮件阅读器。

使用setContentID方法和将setHeader方法与“Content-ID”一起使用时,应该没有功能上的区别。

通常,多部分/相关消息用于允许html部分引用也包含在消息中的图像部分,并与html部分一起显示。可能没有邮件阅读器会显示与html内联的pdf文件。

也许要问的问题是,你究竟想要完成什么?

如果您只是希望pdf文件显示为具有正确文件名的附件,然后用户可以单击以保存或查看,则应使用(默认)multipart / mixed而不是multipart / related。我不确定是否有一种很好的方法可以将链接嵌入到html文本中的附件中。如果您能够使用其他邮件程序创建此类邮件,则可以检查该邮件的结构并使用JavaMail复制它。