Frage

Wenn ich mir selbst eine E -Mail -Beispiel -MHTML -Dateien per E -Mail (zB von hier) Bilder werden in Outlook gut angezeigt. Wenn ich jedoch ein Wortdokument in das MHT -Format (Web -Archiv) konvertiere, werden die Bilder nicht angezeigt. Wenn ich die Datei in einem Browser öffne, werden die Bilder fein angezeigt oder wenn ich die MHT -Datei beifügt und auf den Anhang doppelklicken. Aber wenn die Datei in die E -Mail eingeführt wird, erhalte ich das rote X -Feld mit 'rechter Klick hier, um Bilder herunterzuladen'. Wenn ich Bilder herunterladen möchte, kann 'Datei nicht angezeigt werden ... kann sich verschoben haben ... '.

Irgendwelche Ideen, warum Bilder in Word -Dokumenten, die in MHTML konvertiert sind, nicht gerne Inline in E -Mails anzeigen?

War es hilfreich?

Lösung

Ein MHTML-Dokument ist ein mehrteiliges MIME-Dokument. Der erste Teil des Dokuments ist HTML und verfügt über Links zu den Bildern in den anderen Teilen. Das Problem ist, dass die Links in einer Inline -E -Mail nicht funktionieren, obwohl sie in einem Browser arbeiten. Anschauen einige Beispiele, Sie können sehen, dass die Links von "CID:" und dem Teil nach dem "CID:" vorangestellt werden müssen.

Der Link kann so einfach sein wie "CID: Image002.gif", wobei der inhaltliche ID im entsprechenden MIME-Teil:

Content-ID: <image002.gif>

Wenn alle Links auf diese Weise festgelegt werden, werden die HTML mit den Bildern Inline in Outlook angezeigt.

Andere Tipps

Wie oben erwähnt, verwenden Sie die Inhalt -ID, um Anhänge mit Bild -Tags im HTML -Körper Ihrer E -Mail zu verknüpfen. Im Folgenden finden Sie ein vollständiges Programm zum Öffnen einer MHT -Datei, der Anpassung der Links und der E -Mail an die Ergebnisse.

Ich habe einen Client, der den Word -Automatisierungsdienst verwendet, um eingehende E -Mails in MHT -Dateien zu konvertieren und diese zu senden. Das Problem ist, dass Outlook für die Roh -MHT nicht viel darum ging und die Bilder nicht eingerichtet hat. Hier ist mein POC für eine Lösung. Ich habe den Mimekit und den Versand (Mailkit () verwendet (http://www.mimekit.net/) Im Code das Bouncy Castle C# API (API (http://www.bouncycastle.org/csharp/) um eine Abhängigkeit innerhalb des Mailkits und Antix SMTP -Server für Entwickler abzudecken ((http://antix.co.uk/projects/smtp-server-fordevelopers) Auf dem lokalen Server ausführen, um den SMTP -Datenverkehr zum Testen des Code in Dev zu erhalten. Im Folgenden finden Sie den POC -Code, der eine vorhandene MHT -Datei öffnet und sie mit eingebetteten Bildern per E -Mail senden.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using MimeKit;
using MailKit;
using MimeKit.Utils;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            MimeMessage messageMimeKit = MimeMessage.Load(@"c:\test.mht");
            var images = messageMimeKit.BodyParts.Where(x => x.ContentLocation.LocalPath.EndsWith("png"));
            var bodyString = messageMimeKit.HtmlBody;
            var builder = new BodyBuilder();
            foreach (var item in images)
            {
                item.ContentId = MimeUtils.GenerateMessageId();
                bodyString = bodyString.Replace(GetImageName(item), "cid:" + item.ContentId.ToString());
                builder.LinkedResources.Add(item);
            }
            builder.HtmlBody = bodyString;
            messageMimeKit.Body = builder.ToMessageBody();

            messageMimeKit.From.Add(new MailboxAddress("from address", "NoReply_SharePoint2013Dev@smithmier.com"));
            messageMimeKit.To.Add(new MailboxAddress("to address", "larry@smithmier.com"));
            messageMimeKit.Subject = "Another subject line";
            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {
                client.Connect("localhost");
                client.Send(messageMimeKit);
                client.Disconnect(true);
            }
        }

        private static string GetImageName(MimeEntity item)
        {
            return item.ContentLocation.Segments[item.ContentLocation.Segments.Count() - 2] +
                                item.ContentLocation.Segments[item.ContentLocation.Segments.Count() - 1];
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top