我正在使用Java邮件API进行电子邮件发送。我必须通过电子邮件发送包含HTML <img>
标记和一些附加文件指定的内嵌图像的消息。
我应该为包含内嵌图片和附件文件的部分的MimeMultipart
使用哪种内容类型?
MimeMultipart multipartInline = new MimeMultipart(?);
答案 0 :(得分:5)
这里要考虑三种不同类型的多部分内容:
你可以用各种有趣的方式嵌套这些不同的类型。
要回答原始问题,您需要具有此结构的消息:
main message
multipart/mixed
multipart/related
text/html - main html content
image/jpg - an image referenced by the html
application/pdf - or whatever, for the first attachment
html部分将要使用“cid:”URL引用引用图像部分, 并且图像部分将需要相应的Content-ID标头。 RFC2387有更多详情。你可以通过搜索找到一些例子 JavaMail forum。
答案 1 :(得分:0)
您必须为每个附件使用一个或两个标头:
如果这是正常的附件:
如果是内联附件(邮件图片)
这是为我前段时间编写的小型发送程序提取的:
bodyPart
是MimeBodyPart
。
bodyPart.setHeader("Content-Disposition", disp + "; filename=" + encodedFileName);
bodyPart.setHeader("Content-Transfer-Encoding", "base64");
if (att.getContextId() != null && att.getContextId().length() > 0)
bodyPart.setHeader("Content-ID", "<" + att.getContextId() + ">");
其中:disp包含inline
或attachment
,att.getContextId()
有内联附加的任意ID。
我的HTML邮件食谱
message has via .setContent(...)
mainMultipart is a MimeMultiPart("alternative")
and has via .addBodyPart(...)
textBodyPart is a MimeBodyPart with content-type "text/plain"
relatedMultipart is a MimeMultipart("related")
and has via .addBodyPart(...)
htmlBodyPart "text/html; charset=utf-8"
INLINED-ATTACH1
INLINED-ATTACH2
NORMAL-ATTACH1
NORMAL-ATTACH2