インラインアタッチメントをインラインで表示するのが難しいです。電子メールクライアントがメッセージを受信すると、添付ファイルのすべてが、「インライン」に設定されていることがログからわかるとしても、添付ファイルはすべてコンテンツ処理となります。また、CIDヘッダーを設定すると、いつでも電子メールクライアントに送信されません(例:ソース/オリジナルを表示する場合)。どういうわけか、それはコンテンツの処分のように失われています。今、長さ73336で、画像myimage.jpgを取り付け、 内容:Google App Engine(Java)でインライン電子メールの添付ファイルを送信する
public static void performSend(Event event, Guest guest) throws Exception {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
String htmlBody = event.getEmail().getHtmlBody(event.getInlineInvitationImages(), guest);
Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);
//Add attachments
for(InvitationImage image : event.getInvitationImages()) {
Logger.info("Now attaching image %s, with length %d, content type %s, cid %s and disposition %s", image.filename, image.imageData.length, image.contentType, image.cid, image.getDisposition().toString());
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDisposition(image.getDisposition());
attachment.setFileName(image.filename);
attachment.setContentID("<"+image.cid+">");
DataSource src = new ByteArrayDataSource(image.imageData, image.contentType);
attachment.setDataHandler(new DataHandler(src));
mp.addBodyPart(attachment);
}
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("[email protected]", "My Name"));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(guest.email, guest.getFullname()));
msg.setSubject(event.getEmail().subject);
msg.setContent(mp);
msg.saveChanges();
//Log the email
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
new Log(baos.toByteArray()).save();
Transport.send(msg);
}
私GAEログから関連するスニペットは
をCIDplay.Logger情報は次のとおりです。
私は、次のコードを使用しています型画像/ JPEG、 [email protected]及び配置インライン
Content-Type: multipart/mixed; boundary=20cf307f3beca61df004baa44d82
Return-Path: [email protected]ng.bounces.google.com
X-OriginalArrivalTime: 07 Mar 2012 10:05:47.0455 (UTC) FILETIME=[DE047CF0:01CCFC49]
--20cf307f3beca61df004baa44d82
Content-Type: multipart/alternative; boundary=20cf307f3beca61de604baa44d80
--20cf307f3beca61de604baa44d80
Content-Type: text/plain; charset=ISO-8859-1; format=flowed; delsp=yes
Come to my wedding!
--20cf307f3beca61de604baa44d80
Content-Type: text/html; charset=ISO-8859-1
<p style="color: gray;">Come to my wedding!</p><div><img src="cid:[email protected]" border="0" /></div>
--20cf307f3beca61de604baa44d80--
--20cf307f3beca61df004baa44d82
Content-Type: image/jpeg; name="DamianKathrynWeddingSaveTheDate.jpg"
Content-Disposition: attachment;
filename="DamianKathrynWeddingSaveTheDate.jpg"
Content-Transfer-Encoding: base64
任意の考え:
電子メール・ソースの関連するスニペットは、次のようになりますか?ディスポジションとCIDがクリアされているのはなぜですか?私はいくつかの明白な部分を欠いているか、これは電子メールの不可解な芸術の例ですか?
更新:
私は、データストアにログインエンティティに送信メールをダンプしました。そこには、インライン・イメージが本当に「インライン」のContent-Dispositionを持っていることがわかります。だから、電子メールクライアントに到達するまでに、何かがそれを削除しました。変わったことは、htmlパーツが(下記のように)base64でエンコードされていることです。これは正常ですか?
ここでのGmailに到着したものです:
Message-ID: <[email protected]>
Date: Thu, 08 Mar 2012 11:39:12 +0000
Subject: Test invite
From: My Name <[email protected]>
To: My Name <[email protected]>
Content-Type: multipart/mixed; boundary=20cf307d02b099e2fb04bab9b98d
--20cf307d02b099e2fb04bab9b98d
Content-Type: multipart/alternative; boundary=20cf307d02b099e2f404bab9b98b
--20cf307d02b099e2f404bab9b98b
Content-Type: text/plain; charset=ISO-8859-1; format=flowed; delsp=yes
Come to my wedding!
--20cf307d02b099e2f404bab9b98b
Content-Type: text/html; charset=ISO-8859-1
<p style="color: gray;">Come to my wedding!</p><div><img src="cid:[email protected]" border="0" /></div>
--20cf307d02b099e2f404bab9b98b--
--20cf307d02b099e2fb04bab9b98d
Content-Type: image/jpeg; name="DamianKathrynWeddingSaveTheDate.jpg"
Content-Disposition: attachment;
filename="DamianKathrynWeddingSaveTheDate.jpg"
Content-Transfer-Encoding: base64
/9j/4AAQSkZJRgABAQEBLAEsAAD/7QBSUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABkcAVoAAxsl
そして、ここでは、同じメッセージのために私によってログに記録されているものです。
From: My Name <[email protected]>
To: My Name <[email protected]>
Message-ID: <[email protected]>
Subject: Test invite
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_20814850.1331206751553"
------=_Part_0_20814850.1331206751553
Content-Type: text/html
Content-Transfer-Encoding: base64
PHAgc3R5bGU9ImNvbG9yOiBncmF5OyI+Q29tZSB0byBteSB3ZWRkaW5nITwvcD48ZGl2PjxpbWcg
c3JjPSJjaWQ6ZTRhZTMzODgtMzEyZC00OThlLWI5NTgtMTJlODE0NTA3OTM0QHJzdnAtcm9ja2V0
LmFwcHNwb3QuY29tIiBib3JkZXI9IjAiIC8+PC9kaXY+
------=_Part_0_20814850.1331206751553
Content-Type: image/jpeg; name=DamianKathrynWeddingSaveTheDate.jpg
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=DamianKathrynWeddingSaveTheDate.jpg
Content-ID: <[email protected]>
/9j/4AAQSkZJRgABAQEBLAEsAAD/7QBSUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABkcAVoAAxsl
任意のアイデア? GAEの電子メールは、Amazon SESとPostmarkを見るとすぐに「あまりにもハードな」バスケットになります。