169 votes

intégration d'une image dans un courriel html

J'essaie d'envoyer un email html multipart/related avec des images gif intégrées. Cet email est généré à l'aide d'Oracle PL/SQL. Mes tentatives ont échoué, l'image apparaissant sous la forme d'un X rouge (dans Outlook 2007 et yahoo mail).

J'envoie des courriels en html depuis un certain temps, mais j'ai maintenant besoin d'utiliser plusieurs images gif dans le courriel. Je peux les stocker sur l'un de nos serveurs web et créer un lien vers elles, mais de nombreux clients de messagerie ne les afficheront pas automatiquement et il faudra soit modifier les paramètres, soit les télécharger manuellement pour chaque e-mail.

Je pense donc qu'il faut intégrer l'image. Mes questions sont les suivantes :

  1. Qu'est-ce que je fais de travers ?
  2. L'approche de l'intégration est-elle la bonne ?
  3. Y a-t-il d'autres options si je dois utiliser de plus en plus d'images ? Les pièces jointes ne fonctionnent pas, car les images sont généralement des logos et des icônes qui n'ont pas de sens dans le contexte du message. De plus, certains éléments de l'e-mail sont des liens vers un système en ligne, de sorte que la génération d'un PDF statique et sa mise en pièce jointe ne fonctionneront pas (à ma connaissance en tout cas).

extrait :

MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"

--a1b2c3d4e3f2g1

content-type: text/html;

    <html>
    <head><title>My title</title></head>
    <body>
    <div style="font-size:11pt;font-family:Calibri;">
    <p><IMG SRC="cid:my_logo" alt="Logo"></p>

... more html here ...

</div></body></html> 

--a1b2c3d4e3f2g1

Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline

[base64 image data here]

--a1b2c3d4e3f2g1--

Merci beaucoup.

BTW : Oui, j'ai vérifié que les données base64 sont correctes, car je peux intégrer l'image dans le html lui-même (en utilisant le même algo que celui utilisé pour créer les données d'en-tête) et voir l'image dans Firefox/IE.

Je tiens également à préciser qu'il ne s'agit PAS de spam, les courriels sont envoyés à des clients spécifiques qui les attendent quotidiennement. Le contenu est basé sur des données et non sur des publicités.

177voto

Bernd Points 536

Essayez de l'insérer directement, de cette façon vous pouvez insérer plusieurs images à différents endroits du courriel.

<img src="data:image/jpg;base64,{{base64-data-string here}}" />

Et de faire en sorte que ce message soit utile à d'autres : Si vous n'avez pas de chaîne de données base64, créez-en une facilement à l'adresse suivante : http://www.motobit.com/util/base64-decoder-encoder.asp à partir d'un fichier image.

Le code source de l'email ressemble à ceci, mais je ne peux vraiment pas vous dire à quoi sert cette limite :

 To: email@email.de
 Subject: ...
 Content-Type: multipart/related;
 boundary="------------090303020209010600070908"

This is a multi-part message in MIME format.
--------------090303020209010600070908
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    <img src="cid:part1.06090408.01060107" alt="">
  </body>
</html>

--------------090303020209010600070908
Content-Type: image/png;
 name="moz-screenshot.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.06090408.01060107>
Content-Disposition: inline;
 filename="moz-screenshot.png"

[base64 image data here]

--------------090303020209010600070908--

//EDITION : Oh, je viens de réaliser que si vous insérez le premier extrait de code de mon article pour écrire un email avec Thunderbird, Thunderbird modifie automatiquement le code html pour qu'il ressemble à peu près au deuxième code de mon article.

41voto

Khyati Elhance Points 365

L'autre solution consiste à joindre l'image en tant que pièce jointe et à la référencer dans le code html à l'aide de cid.

Code HTML :

<html>
    <head>
    </head>
    <body>
        <img width=100 height=100 id="1" src="cid:Logo.jpg">
    </body>
</html>

Code C# :

EmailMessage email = new EmailMessage(service);
email.Subject = "Email with Image";
email.Body = new MessageBody(BodyType.HTML, html);
email.ToRecipients.Add("abc@xyz.com");
string file = @"C:\Users\acv\Pictures\Logo.jpg";
email.Attachments.AddFileAttachment("Logo.jpg", file);
email.Attachments[0].IsInline = true;
email.Attachments[0].ContentId = "Logo.jpg";
email.SendAndSaveCopy();

16voto

Pavel Perna Points 8

Je ne trouve aucune des réponses données ici utiles, c'est pourquoi je propose ma solution.

  1. Le problème est que vous utilisez multipart/related comme type de contenu, ce qui n'est pas bon dans ce cas. J'utilise multipart/mixed et à l'intérieur multipart/alternative (cela fonctionne sur la plupart des clients).

  2. La structure du message doit être la suivante :

    [Headers]
    Content-type:multipart/mixed; boundary="boundary1"
    --boundary1
    Content-type:multipart/alternative; boundary="boundary2"
    --boundary2
    Content-Type: text/html; charset=ISO-8859-15
    Content-Transfer-Encoding: 7bit
    [HTML code with a href="cid:..."]
    
    --boundary2
    Content-Type: image/png;
    name="moz-screenshot.png"
    Content-Transfer-Encoding: base64
    Content-ID: <part1.06090408.01060107>
    Content-Disposition: inline; filename="moz-screenshot.png"
    [base64 image data here]
    
    --boundary2--
    --boundary1--

Il fonctionnera alors

11voto

Erwin Mayer Points 3427

Si cela ne fonctionne pas, vous pouvez essayer l'un de ces outils qui convertissent l'image en tableau HTML (attention toutefois à la taille de l'image) :

7voto

Je sais que c'est un vieux post, mais les réponses actuelles n'abordent pas le fait qu'outlook et beaucoup d'autres fournisseurs d'email ne supportent pas les images en ligne ou les images CID. La façon la plus efficace de placer des images dans les courriels est de les héberger en ligne et de placer un lien vers elles dans le courriel. Pour les petites listes d'adresses électroniques, une boîte de téléchargement publique fonctionne très bien. Cela permet également de réduire la taille de l'e-mail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X