incorporation d’image dans le courrier électronique html

J’essaie d’envoyer un email HTML multipart / related avec des images gif incorporées. Cet email est généré en utilisant 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 emails HTML depuis un certain temps, mais je dois maintenant utiliser plusieurs images gif dans le courrier électronique. Je peux les stocker sur l’un de nos serveurs Web et y accéder, mais de nombreux utilisateurs ne les affichent pas automatiquement et devront soit modifier les parameters, soit les télécharger manuellement pour chaque courrier électronique.

Donc, mes pensées sont d’intégrer l’image. Mes questions sont:

  1. Que fais-je mal ici?
  2. Est-ce que l’approche d’intégration est la bonne?
  3. D’autres options si j’ai besoin d’utiliser de plus en plus d’images? Les pièces jointes ne fonctionneront pas, car les images sont généralement des logos et des icons qui n’ont aucun 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 générer un fichier PDF statique et l’attacher ne fonctionnera pas (à ma connaissance de toute façon).

fragment:

MIME-Version: 1.0 To: [email protected] BCC: [email protected] From: [email protected] Subject: Test Reply-To: [email protected] Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1" --a1b2c3d4e3f2g1 content-type: text/html;  My title  

Logo

... more html here ...
--a1b2c3d4e3f2g1 Content-Type: image/gif; Content-ID: 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 code HTML lui-même (en utilisant la même utilisation d’algo pour créer des données d’en-tête) et voir l’image dans Firefox / IE.

Je dois également noter que ce n’est pas pour le spam, les e-mails sont envoyés à des clients spécifiques qui l’attendent quotidiennement. Le contenu est basé sur les données, et non sur les publicités.

Essayez de l’insérer directement, de cette façon, vous pouvez insérer plusieurs images à différents endroits dans l’e-mail.

  

Et pour que cette publication soit utile à d’autres personnes: Si vous ne disposez pas d’une chaîne de données base64, créez-en une facilement à l’ adresse : http://www.motobit.com/util/base64-decoder-encoder.asp à partir d’un fichier image .

Le code source de l’e-mail ressemble à quelque chose comme ça, mais je ne peux vraiment pas vous dire à quoi sert cette limite:

  To: [email protected] 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          --------------090303020209010600070908 Content-Type: image/png; name="moz-screenshot.png" Content-Transfer-Encoding: base64 Content-ID:  Content-Disposition: inline; filename="moz-screenshot.png" [base64 image data here] --------------090303020209010600070908-- 

// EDIT: Oh, je réalise 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 second code de mon article.

L’autre solution consiste à attacher l’image en pièce jointe, puis à lui référencer le code HTML à l’aide de cid.

Code HTML:

        

Code C #:

 EmailMessage email = new EmailMessage(service); email.Subject = "Email with Image"; email.Body = new MessageBody(BodyType.HTML, html); email.ToRecipients.Add("[email protected]"); ssortingng 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(); 

Je ne trouve aucune des réponses ici utile, alors je fournis 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:  Content-Disposition: inline; filename="moz-screenshot.png" [base64 image data here] --boundary2-- --boundary1-- 

Alors ça va marcher

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

Utiliser Base64 pour intégrer des images au format HTML est génial. Néanmoins, notez que les chaînes en base64 peuvent augmenter la taille de votre email.

Donc,

1) Si vous avez de nombreuses images, le téléchargement de vos images sur un serveur et le chargement de ces images à partir du serveur peuvent réduire la taille de votre courrier électronique. (Vous pouvez obtenir beaucoup de services gratuits via Google)

2) S’il n’y a que quelques images dans votre courrier, l’utilisation de chaînes en base64 est certainement une option géniale.

Outre les choix fournis par les réponses existantes, vous pouvez également utiliser une commande pour générer une chaîne base64 sur Linux:

 base64 test.jpg 
  1. Vous avez besoin de 3 limites pour que les images en ligne soient entièrement conformes.

  2. Tout se passe à l’intérieur du multipart/mixed .

  3. Utilisez ensuite le multipart/related pour contenir votre multipart/alternative et vos en-têtes de pièce jointe.

  4. Enfin, incluez vos pièces jointes téléchargeables dans la dernière limite de multipart/mixed .

Il y a en fait un très bon article de blog qui répertorie les avantages et les inconvénients de trois approches différentes de ce problème par Martyn Davies. Vous pouvez le lire sur https://sendgrid.com/blog/embedding-images-emails-facts/ .

Je voudrais append une quasortingème approche en utilisant des images de fond CSS.

Ajouter

 

à votre corps de courrier électronique et à une classe css comme:

 #myImage { background-image: url('data:image/png;base64,iVBOR...[some more encoding]...rkggg=='); width: [the-actual-image-width]; height: [the-actual-image-height]; } 

Il peut être intéressant que Outlook et Outlook Express puissent générer ces formats de courrier image multipart, si vous insérez les fichiers image à l’aide de la fonction de menu Insérer / Image.

De toute évidence, le type de courrier électronique doit être défini sur HTML (pas de texte brut).

Toute autre méthode (par exemple glisser / déposer ou toute invocation de ligne de commande) entraîne l’envoi de la ou des images en pièce jointe.

Si vous envoyez ensuite un tel email à vous-même, vous pouvez voir comment il est formaté! 🙂

FWIW, je cherche un exécutable Windows autonome qui fait des images en ligne à partir du mode ligne de commande, mais il semble y en avoir aucune. C’est un chemin que beaucoup ont augmenté … On peut le faire avec, disons, Outlook Express, en lui transmettant un fichier .eml formaté de manière appropriée.

Pour ceux qui ne pouvaient pas obtenir l’une de ces solutions: Envoyer une image en ligne dans un courrier électronique Suite aux étapes décrites dans la solution proposée par @ T30, j’ai pu afficher mon image en ligne sans être bloquée par Outlook (méthodes précédentes bloquées) . Si vous utilisez l’échange comme nous le sums alors aussi lorsque vous faites:

 service = new ExchangeService(ExchangeVersion); service.AutodiscoverUrl("[email protected]"); SmtpClient smtp = new SmtpClient(service.Url.Host); 

vous devrez lui transmettre votre hôte d’URL de service d’échange. En dehors de cela, suivre cette solution devrait vous permettre d’envoyer facilement des images incorporées.

Si vous utilisez Outlook pour envoyer une image statique avec un lien hypertexte, une méthode simple consisterait à utiliser Word.

  1. Ouvrez MS Word
  2. Copiez l’image sur une page vierge
  3. Ajouter un hyperlien à l’image (Ctrl + K)
  4. Copiez l’image sur votre email