2010-05-18 6 views
2

Je voudrais savoir comment construire un message multipart SMTP dans le bon ordre afin qu'il soit rendu correctement sur le client de messagerie iPhone (rendu correctement dans GMail).Comment envoyer un e-mail avec des images intégrées et des pièces jointes standard dans JavaMail?

J'utilise Javamail pour construire un email contenant les pièces suivantes:

  • Une partie du corps avec le type de contenu "text/html; UTF-8"
  • Une pièce jointe d'image intégrée.
  • Un fichier joint

J'envoie le courrier via GMail SMTP (via SSL) et le courrier est envoyé et recomposés à l'aide correctement un compte GMail, cependant, le courrier ne rend pas correctement sur le client de messagerie iPhone . Sur le client de messagerie iPhone, l'image est rendue avant le texte "Avant l'image", quand il doit être rendu par la suite. Après le texte "Avant l'image" il y a une icône avec un point d'interrogation (je suppose que cela signifie qu'il n'a pas pu trouver le CID référencé). Je ne suis pas sûr que ce soit une limitation du client de messagerie iPhone ou un bug dans mon code d'envoi de courrier (je suppose fortement le dernier).

Je pense que peut-être les en-têtes sur mes parties pourraient être incorrectes ou peut-être que je fournis les parties multiples dans le mauvais ordre. J'inclure le texte du courrier reçu en sortie par gmail (qui rend le fichier correc

Message-ID: <[email protected]> 
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-- 

Même si vous ne pouvez pas me aider, je vous serais reconnaissant si tous les membres du forum peuvent me faire parvenir une (non personnelles) courrier qui comprend des images en ligne (pas les images des liens hypertexte externes cependant). Je juste besoin de trouver un échantillon de travail alors je peux passer devant cela.

Merci,

Chris.

Répondre

1

Avez vous lisez RFC 2822, qui définit la spécification requ irements pour l'email? Je ne l'ai pas lu moi-même, donc je ne suis pas sûr si cela mentionne le courrier électronique en plusieurs parties, mais ce pourrait être un bon point de départ. Apple semble être assez bon pour coller aux normes.

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

1

je ne suis pas voir tout Content-Disposition dans les base64 partie d'image. Vous devriez probablement mettre cela en ligne. Vous pouvez même inclure un nom de fichier ici et il y a plus d'options (regardez-les).

Exemple:

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

Il semble un peu louche vous configurez votre type de contenu à une application/octet-stream ainsi, vous pouvez simplement mettre cela au bon format.

Exemple:

Content-Type: image/gif; name="inlineimage1.gif" 
0

Si quelqu'un trébuche sur ce point - voici comment les multiparts devraient être composées:

  • multipart/mixtes (contiendront du texte et des pièces jointes)

    • multipart/alternative (Contient le texte et le HTML)

      • text/plain (texte brut)
      • multipart/related (HTML + images intégrées)
        • text/html (contenu Html, images référencées src = "cid: xxx"
        • image1 (Content-Id: xxx)
        • image2
        • ...
    • fixation 1
    • accessoire 2
    • ...
Questions connexes