Pregunta

Cuando me envío un correo electrónico, muestreé archivos MHTML (por ejemplo, desde aquí) Las imágenes se muestran bien en Outlook. Sin embargo, cuando convierto un documento de Word en formato MHT (archivo web), las imágenes no se muestran. Si abro el archivo en un navegador, las imágenes se muestran bien, o si adjunto el archivo MHT y haga doble clic en el archivo adjunto. Pero si el archivo se incluye en el correo electrónico, obtengo el cuadro Red X con 'Haga clic derecho aquí para descargar imágenes', y si selecciono descargar imágenes, entonces 'no se puede mostrar el archivo ... puede haber movido ... '.

¿Alguna idea por qué las imágenes en los documentos de Word convertidas a MHTML no le gusta mostrar en línea en los correos electrónicos?

¿Fue útil?

Solución

Un documento MHTML es un documento MIME de varias partes. La primera parte del documento es HTML y tiene enlaces a las imágenes en las otras partes. El problema es que los enlaces no funcionan en un correo electrónico en línea a pesar de que funcionan en un navegador. Mirando a algunos ejemplos, puede ver que los enlaces deben estar prefijados por "CID:", y la parte después del "CID:" debe tener un ID de contenido en el encabezado de la parte MIME correspondiente.

El enlace puede ser tan simple como "CID: Image002.gif" con el ID de contenido en la parte MIME correspondiente: es:

Content-ID: <image002.gif>

Si todos los enlaces se solucionan de esta manera, el HTML con las imágenes se mostrará en línea en Outlook.

Otros consejos

Como se mencionó anteriormente, utiliza la ID de contenido para vincular los archivos adjuntos a las etiquetas de imagen dentro del cuerpo HTML de su correo electrónico. A continuación se muestra un programa completo para abrir un archivo MHT, ajustar los enlaces y enviar un correo electrónico a los resultados.

Tengo un cliente que está utilizando el servicio de automatización de Word para convertir los correos electrónicos entrantes en archivos MHT y enviarles un correo electrónico. El problema es que a Outlook no le importaba mucho el MHT crudo y no en línea las imágenes. Aquí está mi POC para una solución. Utilicé el Mimekit y Mailkit (http://www.mimekit.net/) En el código, el castillo hinchable C# API (http://www.bouncycastle.org/csharp/) para cubrir una dependencia dentro de Mailkit, y Antix SMTP Server para desarrolladores (http://antix.co.uk/projects/smtp-server-for-developers) Ejecutando en el servidor local para recibir el tráfico SMTP para probar el código en Dev. A continuación se muestra el código POC que abre un archivo MHT existente y lo envía correos electrónicos con imágenes integradas.

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];
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top