如何在 JavaMail(标准电子邮件)中嵌套 MimeBodyParts?

问题描述 投票:0回答:2

我正在尝试使用 JavaMail 发送一封 html 电子邮件(带有文本替代),其中包含嵌入/内联图像。

我想看看格式正确的消息是什么样子,所以我使用带有内嵌图像的 gmail 发送了一条消息,下面是原始来源。看起来好像他们将身体部位嵌套在消息中。我如何使用 javamail 准确地复制此内容。我发现无法将一个 Multipart 放入另一个 Multipart 中。

MIME 版本:1.0 接收:通过 HTTP 于 10.50.75.3 接收; 2012 年 2 月 23 日,星期四 20:15:34 -0800(太平洋标准时间) 日期:2012 年 2 月 23 日星期四 20:15:34 -0800 发送至:[email protected] 消息 ID: 主题:c 来自:Foo Bar 至:Foo 栏内容类型:多部分/相关; 边界=e89a8f3b9b051e124104b9ae03fb

--e89a8f3b9b051e124104b9ae03fb 内容类型:多部分/替代;边界=e89a8f3b9b051e123604b9ae03fa

--e89a8f3b9b051e123604b9ae03fa 内容类型:文本/纯文本;字符集=ISO-8859-1

这里是纯文本内容

--e89a8f3b9b051e123604b9ae03fa 内容类型:text/html;字符集=ISO-8859-1


--e89a8f3b9b051e123604b9ae03fa-- --e89a8f3b9b051e124104b9ae03fb 内容类型:image/png; name="logo.png" 内容传输编码:base64 内容 ID: X-附件-Id:ii_135ad92205fc1ace

iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVR42u3ZsQnAIBBGYVtHShVI 7ViprASXcw8HMCckEGyTkB98xWsE4WvOwnMhBG/tVrGaSOU0+Q5MVhMtdWAVBLY3HCyW+7nlbhqB TiGAAAECBAhwMqB0AN8ANuUkgQzJvEPy1WP75C5AgAABAgQ4GXATAK4DUP8LOAsD87WGiIJriGj5 AwiiiyDxmymtAAAAAElFTkSuQmCC --e89a8f3b9b051e124104b9ae03fb--

更新:

使用标准的多部分内联图像方法(如 lechlukasz 链接的方法)会生成以下电子邮件,但不完全是我需要的:

MIME 版本:1.0 已接收:通过 10.236.146.106 使用 SMTP ID q70mr1894063yhj.0.1330071158663; 2012 年 2 月 24 日星期五 00:12:38 -0800 (太平洋标准时间)回复:Foo Bar 消息 ID: <[email protected]> 日期:2012 年 2 月 24 日星期五 08:12:38 +0000 主题:拜托哦拜托4 来自:Foo Bar 至:Foo Bar 内容类型: 多部分/替代;边界=20cf303bfc80f02ce704b9b152d6

--20cf303bfc80f02ce704b9b152d6 内容类型:文本/纯文本;字符集=UTF-8;格式=流动; delsp=yes 内容传输编码: base64

77+9UE5HDQoaDQoAAAANCklIRFIAAAAoAAAAKAgGAAAA77+977+977+9bQAAAO+/vUlEQVR477+9 77+977+977+9Ce+/vSAgDQoQRmFbR0oVSO+/vVjvv73vv70E77+9cw8HMCckEGzvv73vv70ffO+/vWsE77+9a++/ve+/vXMhBG/vv71W77+977+9SO+/vTTvv70OTFYTLXVgFQ ZWNxws77+977+977+9 77+9bhrvv71OIe+/vQABAgQIcDLvv710AO+/vQA277+9JO+/vQzvv73vv71D77+977+9Y++ /ve+/ vS5A77+9AAECBDgZcBMA77+9A1Dvv70LOAsD77+977+977+977+977+9a++/vWjvv70DCO+/ve+/ vSDvv73vv70p77+9AAAAAElFTkTvv71CYO+/vQ0K --20cf303bfc80f02ce704b9b152d6 内容类型:text/html;字符集 = ISO-8859-1 内容传输编码:引用打印

--20cf303bfc80f02ce704b9b152d6--

java google-app-engine email jakarta-mail html-email
2个回答
8
投票

您可以通过创建 MimeBodyPart、将其内容设置到 Multipart 并将该正文部分添加到第一个 Multipart 来将 Multipart 放入另一个 Multipart。


0
投票

本质上,这就是要做的事情:

Message msg = new MimeMessage( session );
msg.setFrom( "from foo" );
msg.setRecipients( Message.RecipientType.TO, "[email protected]" );
msg.setSubject( "subj" );

MimeMultipart altAndAtt = new MimeMultipart( "mixed" );

{ // add alternative plain + html part

    MimeMultipart plainAndHtml = new MimeMultipart( "alternative" );

    MimeBodyPart plain = new MimeBodyPart();
    plain.setContent( plainBody, "text/plain; charset=utf-8" );
    plainAndHtml.addBodyPart( plainString );

    MimeBodyPart html = new MimeBodyPart();
    html.setContent( htmlBody, "text/html; charset=utf-8" );
    plainAndHtml.addBodyPart( htmlString );

    MimeBodyPart wrapper = new MimeBodyPart();  // needed for nesting multipart in multipart
    wrapper.setContent( plainAndHtml );
    altAndAtt.addBodyPart( wrapper );
}

{ // add attachment part

    MimeBodyPart attPart = new MimeBodyPart();
    attPart.attachFile( myFilePath );

    altAndAtt.addBodyPart( attPart );
}


msg.setContent( altAndAtt );
© www.soinside.com 2019 - 2024. All rights reserved.