Как отправить электронное письмо со встроенными изображениями и обычными вложениями в JavaMail? - PullRequest
2 голосов
/ 18 мая 2010

Я хотел бы знать, как построить составное SMTP-сообщение в правильном порядке, чтобы оно правильно отображалось на почтовом клиенте iPhone (правильное отображение в GMail).

Я использую Javamail для создания электронной почты, содержащей следующие части:

  • Часть тела с типом содержимого "text / html; UTF-8"
  • Вложение вложенного изображения.
  • Вложение файла

Я отправляю почту через SMTP GMail (через SSL), и почта отправляется и обрабатывается правильно с использованием учетной записи GMail, однако почта не отображается правильно на почтовом клиенте iPhone. В почтовом клиенте iPhone изображение отображается перед текстом «Перед изображением», после чего оно должно быть отображено позже. После текста «Перед изображением» есть значок со знаком вопроса (я полагаю, это означает, что он не может найти CID, на который ссылаются). Я не уверен, является ли это ограничением почтового клиента iPhone или ошибкой в ​​моем коде отправки почты (я настоятельно предполагаю последний).

Я думаю, что, возможно, заголовки на моих частях могут быть неправильными или, возможно, я предоставляю мультипартии в неправильном порядке. Я включаю текст полученной почты как вывод gmail (который отображает файл correc

Message-ID: <3977333.1.1274154021787.JavaMail.Chris@smtp.gmail.com>
Subject: =?UTF-8?Q?Test_from_=E3=82=AF=E3=83=AA=E3=82=B9?=
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_0_20870565.1274154021755"

------=_Part_0_20870565.1274154021755
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-ID: <20100518124021763_368238_0>

iVBORw0K ----- TRIMMED FOR CONCISENESS
6p1VVy4alAAAAABJRU5ErkJggg==
------=_Part_0_20870565.1274154021755
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<html><head><title>Employees Favourite Foods</title>
<style>
        body { font: normal 8pt arial; }
        th   { font: bold   8pt arial; white-space: nowrap; }
        td   { font: normal 8pt arial; white-space: nowrap; }
</style></head><body>

        Before Image<br><img src="cid:20100518124021763_368238_0">
        After Image<br><table border="0">
<tr>
<th colspan="4">Employees Favourite Foods</th>
</tr>
<tr>
<th align="left">Name</th><th align="left">Age</th><th align="left">Tel.No</th><th align="left">Fav.Food</th>
</tr>
<tr style="background-color:#e0e0e0">
<td>Chris</td><td>34</td><td>555-123-4567</td><td>Pancakes</td>
</tr>
</table></body></html>
------=_Part_0_20870565.1274154021755
Content-Type: text/plain; charset=us-ascii; name=textfile.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=textfile.txt

This is a textfile with numbers counting from one to ten beneath this line:
one
two
three
four
five
six
seven
eight
nine
ten(no trailing carriage return)
------=_Part_0_20870565.1274154021755--

Даже если вы не можете помочь мне с этим, я был бы признателен, если бы кто-либо из участников форума мог переслать мне (не личное) письмо, содержащее встроенные изображения (но не внешние гиперссылки). Мне просто нужно найти рабочий образец, и я смогу пройти мимо этого.

Спасибо

Крис.

Ответы [ 3 ]

1 голос
/ 28 мая 2010

Я не вижу никакого Content-Disposition в части изображения в кодировке base64. Вы, вероятно, должны установить это встроенным. Вы можете даже включить имя файла здесь, и есть больше вариантов (ищите их).

Пример:

Content-Disposition: inline; filename="inlineimage1.gif"

Кажется немного странным, что вы также устанавливаете тип контента для application / octet-stream, вы можете просто установить его в правильный формат.

Пример:

Content-Type: image/gif; name="inlineimage1.gif"
1 голос
/ 18 мая 2010

Вы читали RFC 2822, который определяет требования к спецификации электронной почты? Я сам не читал об этом, поэтому не уверен, что в нем упоминается электронная почта, состоящая из нескольких частей, но это может быть хорошим началом. Apple, кажется, очень хорошо придерживается стандартов.

http://www.faqs.org/rfcs/rfc2822.html

0 голосов
/ 23 декабря 2015

Если кто-то наткнулся на это - вот как должны быть составлены мультипартии:

  • multipart / mixed (будет содержать текст и вложения)

    • multipart / alternative (будет содержать текст и HTML)

      • текст / простой текст (обычный текст)
      • multipart / related (HTML + встроенные изображения)
        • text / html (HTML-контент, изображения, обозначенные как src = "cid: xxx"
        • image1 (Content-Id: xxx)
        • image2
        • ...
    • приложение 1
    • приложение 2
    • ...
...