繁体   English   中英

使用C#和Outlook Interop发送带有图像的电子邮件与在电子邮件中复制粘贴图像

[英]Sending email with image using C# and Outlook Interop vs copy paste image in email

我制作了一个小型的C#WFP应用程序,可以使用C#和Outlook Interop发送带有嵌入式图像的电子邮件。 与手动创建的电子邮件相比,与使用CTRL + V直接粘贴图像的手动创建的电子邮件相比,许多邮件客户端对从此应用程序发送的电子邮件的反应似乎有所不同。

我尝试使用OutlookSpy比较这两封电子邮件,但是看不到任何可能导致处理电子邮件方式不同的差异。

Iphone上的Outlook应用程序中收到从C#应用程序发送的电子邮件时,图像为空白。 当手动创建图像并使用CTRL + V粘贴图像时,它的效果很好。

1)如何确保从应用程序发送的电子邮件的处理方式与在Outlook中手动创建电子邮件并使用CTRL + V复制图像的方式相同? 如果可以进行此项工作,则应该可以在Outlook for Iphone中正确显示图像。

2)使用CTRL + V粘贴后,Outlook如何处理图像? 似乎它使用Cid的方式与我在应用程序中使用的方式相同,但是如果未附加图像,它将如何引用该图像?

这是示例应用程序的代码:

    private void SendEmailButton_OnClick(object sender, RoutedEventArgs e)
    {
        SendMail();
    }

    public void SendMail()
    {
        var application = GetOutlookApplication();
        MailItem newMail = (MailItem)application.CreateItem(OlItemType.olMailItem);
        newMail.To = "!!!EnterValidEmailAddress!!!";
        newMail.Subject = "Image test";

        //Create image as embedded attachment
        Attachment attachment1 = newMail.Attachments.Add(@"C:/SomeImage1.png", OlAttachmentType.olByValue);
        string imageCid1 = "SomeImage_1";

        //The property Accessor to be able to refer to the image from Email HTML Body using CID
        attachment1.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid1);
        //Set property Accesor to hide attachment
        attachment1.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x7FFE000B", true);

        //Refer the attachment using cid
        newMail.HTMLBody = String.Format("<a href=\"{0}\"><img src=\"cid:{1}\"></a>", "google.dk", imageCid1);
        newMail.Save();
        newMail.Display();
    }

    public static OutlookApplication GetOutlookApplication()
    {
        // Start outlook process if it is not startet already
        if (!IsOutlookRunning())
        {
            using (Process p = new Process())
            {
                p.StartInfo.FileName = "OUTLOOK.EXE";
                p.Start();

                if (!p.WaitForInputIdle(10000))
                    Thread.Sleep(5000);
            }
        }

        // Start the outlook application (API)
        OutlookApplication oApp = null;
        if (Process.GetProcessesByName("OUTLOOK").Any())
        {
            try
            {
                oApp = Marshal.GetActiveObject("Outlook.Application") as OutlookApplication;

            }
            catch (System.Exception)
            {
                if (oApp == null)
                    oApp = new OutlookApplication();
            }
            return oApp;
        }
        oApp = new OutlookApplication();
        return oApp;


    }

    private static bool IsOutlookRunning()
    {
        Process[] p = Process.GetProcessesByName("Outlook");
        return p.Length != 0;
    }

确保最终得到格式正确的HTML标记。 以下代码行仅将<a>标记添加到主体字符串的末尾:

newMail.HTMLBody += String.Format("<a href=\"{0}\"><img src=\"cid:{1}\"></a>", "google.dk", imageCid1);

相反,您需要在<body></body>标记之间找到图像的正确位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM