私はjavamail APIについて学んでいます。画像を含むメールを送信するには、imgPart.setHeader ("Content-ID", "img") を使用します。受信者には、上記の画像と画像が添付されたメール コンテンツが表示されます。しかし、Outlook を使用して画像を含むメールを作成すると、受信者には添付画像が表示されず、メール テキストと埋め込み画像のみが表示されます。Outlook はどのようにそれを行うことができますか?
ありがとうございました。
私はjavamail APIについて学んでいます。画像を含むメールを送信するには、imgPart.setHeader ("Content-ID", "img") を使用します。受信者には、上記の画像と画像が添付されたメール コンテンツが表示されます。しかし、Outlook を使用して画像を含むメールを作成すると、受信者には添付画像が表示されず、メール テキストと埋め込み画像のみが表示されます。Outlook はどのようにそれを行うことができますか?
ありがとうございました。
Outlook およびその他の同様のクライアントは、プレーン テキストに加えて HTML バージョンのテキストを埋め込みます。html では、img
(画像自体を埋め込むときに設定した) タグを使用して、その ID で画像を参照します。画像は、既に行っているように個別に埋め込まれます。
ただし、パーツ ID には「img」よりも一意の ID (上記のタグと混同しないでください) を使用することをお勧めします (たとえば、元のファイル名をハッシュします)。
アップデート:
より明確に示すために、ここに例を示します。私がこのメールを送信したとしましょう:
これにより、このソースが SMTP 経由で送信されます。最初の部分がプレーン テキストになっていることがわかります。
...other header parts snipped
Subject: Demo attachments
Content-Type: multipart/alternative;
boundary="------------080308060008080306040307"
This is a multi-part message in MIME format.
--------------080308060008080306040307
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
This text is attached as HTML. As we reference an image this will be
displayed here as well as being an attachment as usual.
End of message
--------------080308060008080306040307
その後、Thunderbird (この場合、Outlook と同じ) は、編集された同じテキストの HTML バージョンを挿入します。
Content-Type: multipart/related;
boundary="------------080209080402080405070800"
--------------080209080402080405070800
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#FFFFFF">
This text is attached as HTML. As we reference an image this will be
displayed here as well as being an attachment as usual.<br>
<br>
<img src="cid:part1.03070608.09040802@xxxxxxxxxxxxxxxx" alt=""><br>
<br>
End of message<br>
<br>
</body>
</html>
--------------080209080402080405070800
上の画像のリンクに注目してください (ドメインを x でスクランブルしました):
<img src="cid:part1.03070608.09040802@xxxxxxxxxxxxxxxx" alt="">
メッセージ本文の残りの添付ファイルを見るとContent-ID
、HTML で参照されているものと同じ ID を持っていることがわかります。画像自体は通常どおり Base64 形式で添付されています。参照リンクは常にcid:<attachement ID>
ID は、身体の他の部分と衝突しないものであれば何でもかまいません。
また、Content-Disposition
Thunderbird にインラインで表示するように指示する行にも注意してください。これは HTML で参照されているため、厳密には必要ではありませんが、クライアントがこの画像の意図がインラインで表示することであったのか、それとも「純粋な画像」としてダウンロードできるようにすることであったのかを知るのに役立ちます。 「添付:
Content-Type: image/png;
name="ddebjigc.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.03070608.09040802@xxxxxxxxxxxxxxxx>
Content-Disposition: inline;
filename="ddebjigc.png"
iVBORw0KGgoAAAANSUhEUgAAANsAAAAcCAIAAABnDF0bAAASPElEQVR4nO2b+VMTWbvHc/+I
+TNu6SiyyL4lyL4qm4gIoigiO4ii4OCGsoR9QAQZkRAC4uj4jigZRRyZV3iRfQ+BrJ3uQMjG
Ork/dLrTaxJmbt2aqkvXt6ic06efX/jUs5zzHEZ6WuKBDvTPEePx49YDHeifIwYIQQRBSghS
...この例では、テキストを短くするために省略しています...
sFjyaDrJSZ6SMnZjnCKphQLLIrYhUgGSPSj6IbHoJl2HxYVvEojkezZ0oo3jlD4ScwvW2EhB
c/8Vv4zUZE66LIuGXdOdV1x0xl/H+Zs+EjNEnCKRMPy8pfs3GKdIaKPEOUXSegUikGFNJ/rB
c/D8nz3/A+4rfUt5pwb4AAAAAElFTkSuQmCC
--------------080209080402080405070800--
--------------080308060008080306040307--
これがより明確になったことを願っています。
File template = new File ("template.htm");
FileUtils readContent = new FileUtils ();
String content = readContent.readFileToString (template);
MimeMultipart multiPart = new MimeMultipart ("related");
BodyPart bodyPart = new MimeBodyPart ();
bodyPart.setContent (content, "text/html");
multiPart.addBodyPart (bodyPart);
BodyPart imgPart = new MimeBodyPart ();
DataSource img_data = new FileDataSource ("template\\image001.jpg");
imgPart.setDataHandler (new DataHandler (img_data));
imgPart.setDisposition (MimeBodyPart.INLINE);
imgPart.setHeader ("Content-ID", "img_1");
multiPart.addBodyPart (imgPart);