Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建带有嵌入图像的HTML电子邮件,并使用.net(c#)在默认邮件客户端中显示它?_C#_.net_Email_Mapi_Email Client - Fatal编程技术网

如何创建带有嵌入图像的HTML电子邮件,并使用.net(c#)在默认邮件客户端中显示它?

如何创建带有嵌入图像的HTML电子邮件,并使用.net(c#)在默认邮件客户端中显示它?,c#,.net,email,mapi,email-client,C#,.net,Email,Mapi,Email Client,如果您查看windows中的Snip工具,可以选择将Snip作为默认邮件客户端中的嵌入式附件发送(我猜是html电子邮件)。我需要的正是这个 目前,我正在使用简单的MAPI附加图像,但这不允许嵌入 一个关键的要求是,它应该被创建,然后显示在默认的邮件客户端中。我想我不能用System.Net.Mail来做这件事。或者我可以吗 它是一个使用c#的WPF应用程序 编辑:回答前请仔细阅读问题。我对此并不陌生。我知道如何在非托管代码中做到这一点,而不必求助于黑客。我需要一个有管理的等价物。我不是在寻找黑

如果您查看windows中的Snip工具,可以选择将Snip作为默认邮件客户端中的嵌入式附件发送(我猜是html电子邮件)。我需要的正是这个

目前,我正在使用简单的MAPI附加图像,但这不允许嵌入

一个关键的要求是,它应该被创建,然后显示在默认的邮件客户端中。我想我不能用System.Net.Mail来做这件事。或者我可以吗

它是一个使用c#的WPF应用程序


编辑:回答前请仔细阅读问题。我对此并不陌生。我知道如何在非托管代码中做到这一点,而不必求助于黑客。我需要一个有管理的等价物。我不是在寻找黑客,如果有必要,我很乐意花大量时间在正确的解决方案上。

使用流程。从下面的ShellExecute选项开始:

mailto:email@domain.com?subject=your+file&body=see attachment&attachment="C:\path\to\file.txt"
我不确定这条路周围的引语

编辑

只是想到了另一个可行的解决方案

  • 使用创建HTML电子邮件
  • 使用here asXXXX.eml将其保存
  • 将ShellExecute选项与
    进程一起使用。启动打开EML文件

  • 它应该在默认的电子邮件客户端中打开。

    我不认为在mailto中可以嵌入图像 请参阅。它说mailto仅用于短文本消息,而不用于MIME body

       The special hname "body" indicates that the associated hvalue is the
       body of the message. The "body" hname should contain the content for
       the first text/plain body part of the message. The mailto URL is
       primarily intended for generation of short text messages that are
       actually the content of automatic processing (such as "subscribe"
       messages for mailing lists), not general MIME bodies.
    

    我认为您可以使用命名空间System.Net.Mail中的类来完成这项工作。这需要相当多的工作。我将把它作为读者的练习

    根据,嵌入图像的HTML电子邮件只是将HTML电子邮件正文和图像附件存储在两个不同的MIME内容中

     From: foo1@bar.net
     To: foo2@bar.net
     Subject: A simple example
     Mime-Version: 1.0
     Content-Type: multipart/related; boundary="boundary-example-1";
                   type=Text/HTML
    
     --boundary-example 1
     Content-Type: Text/HTML; charset=US-ASCII
    
     ... text of the HTML document, which might contain a hyperlink
     to the other body part, for example through a statement such as:
     <IMG SRC="cid:foo4*foo1@bar.net" ALT="IETF logo">
    
     --boundary-example-1
     Content-ID: foo4*foo1@bar.net
     Content-Type: IMAGE/GIF
     Content-Transfer-Encoding: BASE64
    
     R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
     NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
     etc...
    
     --boundary-example-1--
    
    来自:foo1@bar.net
    致:foo2@bar.net
    主题:一个简单的例子
    Mime版本:1.0
    内容类型:多部分/相关;boundary=“boundary-example-1”;
    type=Text/HTML
    --边界示例1
    内容类型:Text/HTML;字符集=US-ASCII
    ... HTML文档的文本,可能包含超链接
    到另一个身体部位,例如通过以下语句:
    --边界-示例-1
    内容ID:foo4*foo1@bar.net
    内容类型:图像/GIF
    内容传输编码:BASE64
    r0lgodlhgaggapeap///zracgoaaach+PUNvcHlyaWdodCAoQykgMTk5
    NSBjrVRGBVBMF1DGHVCML6ZWQGZHVWBGLJYXRPB24GCHJVAGLIAXRLZC4A
    等
    --边界-示例-1--
    
    关键的一点是,在HTML电子邮件正文中,您没有使用常规URL路径,而是在“cid:xxxxx”中输入xxxxx,其中xxxxx是您的内容ID。请查看有关内容ID的更多详细信息。从System.Net.Mail命名空间中看到的内容,它允许您创建IsBodyHtml属性设置为true的邮件消息。然后,您需要做的下一件事是将附件添加到此邮件中。附件当然是您嵌入的图像。然后,您需要记住设置附件的ContentID。因此,为了确保您的HTML电子邮件引用的是正确的ContentID,这些操作应该可以正常工作


    同样,我没有亲自验证,但我快速检查了一些嵌入图像的电子邮件。我确实看到了以cid:xxxx作为图像源的电子邮件,我的Outlook客户端可以很好地打开它。

    这会嵌入图像吗?我怀疑不是。嵌入HTML电子邮件中的图像实际上是附件。是的,但您的代码片段是否创建了一个嵌入图像的HTML电子邮件?对不起,被其他东西困住了。还没有机会尝试这个。如果有效,将此标记为答案。谢谢。您可以通过这种方式发送电子邮件(您需要备选查看),但无法在用户发送的默认邮件客户端中显示。是否尝试了我的更新答案?