【问题标题】:Sending mhtml emails - C#发送 mhtml 电子邮件 - C#
【发布时间】:2012-12-19 21:38:24
【问题描述】:

我需要发送包含文本和图像的电子邮件。
所以,我有 .mhtml 文件,其中包含需要通过电子邮件发送的内容。

我为此使用 Chilkat,但在 Outlook 2007 中,它将 mhtml 文件显示为不同的附件(html+图像)。

谁能给我推荐一些用于发送 mhtml 电子邮件的其他组件。
仅供参考,我使用的是 .Net 3.5

另外,我不想在发送之前将图像保存在服务器上。

谢谢!

【问题讨论】:

    标签: c# .net email mhtml


    【解决方案1】:

    我使用普通的老原生 MailMessage 类。这个previous answer 可以为您指明正确的方向

    编辑:我前段时间构建了一个类似的代码,它捕获一个外部 HTML 页面,解析它的内容,获取所有外部内容(css、图像等)并通过电子邮件发送,无需在磁盘上保存任何内容。

    【讨论】:

    • 感谢您的回复。但是上面链接上的帖子使用的是 LinkedResource ,它需要将所有图像物理保存在服务器上,我不希望这样:-(
    • 这并不完全正确:LinkedResource 第一个参数是一个流,因此您的图像可以存储在某个数据库中,例如
    【解决方案2】:

    这是一个使用图像作为嵌入资源的示例。

    MailMessage message = new MailMessage();
    message.From = new MailAddress(fromEmailAddress);
    message.To.Add(toEmailAddress);
    message.Subject = "Test Email";
    message.Body = "body text\nblah\nblah";
    
    string html = "<body><h1>html email</h1><img src=\"cid:Pic1\" /><hr />" + message.Body.Replace(Environment.NewLine, "<br />") + "</body>";
    AlternateView alternate = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html);
    message.AlternateViews.Add(alternate);
    
    Assembly assembly = Assembly.GetExecutingAssembly();
    using (Stream stream = assembly.GetManifestResourceStream("SendEmailWithEmbeddedImage.myimage.gif")) {
        LinkedResource picture = new LinkedResource(stream, MediaTypeNames.Image.Gif);
    
        picture.ContentId = "pic1"; // a unique ID 
        alternate.LinkedResources.Add(picture);
    
        SmtpClient s = new SmtpClient();
        s.Host = emailHost;
        s.Port = emailPort;
        s.Credentials = new NetworkCredential(emailUser, emailPassword);
        s.UseDefaultCredentials = false;
    
        s.Send(message);
    }
    }
    

    【讨论】:

    • 当我从 Aspose 实用程序获取 mhtml 输出时,我无法控制图像的名称,因此在我的情况下设置 ContentId 是不可行的,我认为这是使用 LinkedResource 的基础。还有其他想法吗?
    • @iniki 你能不能只预处理 HTML 内容并将图像的 src 替换为 cid 引用并使用原始内容(文件名或数据 URI)生成 @987654324 @?
    【解决方案3】:
    System.Net would be the one that you are looking for.<br/>
    MailMessage is used to compose new mail.<br/>
    SMTPClient is used to send mail.
    NetworkCredentials would be used to attach username and password for making request to sending mail.
    


    来到你的问题如何添加图像。
    您需要为 MailMessage 设置isHtml=true
    由于您想在 html 中发送邮件的相对路径不会像 ../directory/imagename.formate
    在这种情况下,您需要提供图像位置的完整路径 websiteUrl/directory/imagename.formate
    要动态获取完整的 Url,您可以像这样使用Request.Uri.GetLeftParth(URIPartial.Authority)+VitrtualToAbsolute.getAbsolute("~")

    我不确定最后一行,因为我直接在这里写过。你只需要使用它并祝你好运;-)

    【讨论】:

    • 这不回答如何发送在 MHTML 中嵌入图像的 MHTML 电子邮件
    • Does't answer the question yet get 25 from Community :D
    【解决方案4】:

    您需要将 MIME 类型显式设置为 multipart/related。更改MailMessage.Body 以在其中包含MHTML 文件的内容。最后向MailMessage.AlternateViews 集合中添加一个新项以定义正确的MIME 类型。来自 MSDN 的以下链接有一个很好的示例如何设置它:

    MailMessage.AlternateViews Property

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 2012-07-27
      • 2018-07-24
      • 2020-05-23
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多