Outlook 加载项:自动更改签名不会显示图像

Outlook add-in: Automatically changing signature won't display images

我不得不编写我的第一个 Outlook 加载项。

基本上,我有两个签名可供选择:“oferta”和“default”。根据邮件主题中包含的文字,将使用不同的签名。

纯文本签名一切正常,但当包含图片时,这些图片永远不会发送,而是显示为空白方块。

但是,如果我在 Outlook 中手动 select 任何签名,图片都可以正常显示。

我猜问题出在 GetSignature() 方法中,我从别人的回答中借用了该方法(抱歉,我找不到从哪里得到的!)。

我该如何解决这个问题?有没有更好的自动更改签名的方法?

这是我的代码:

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
    }


    // When an email is sent a different signature is appended depending on the subject.        
    private void Application_ItemSend(object Item, ref bool Cancel)
    {
        MailItem mail = (MailItem)Item;

        string subject = mail.Subject;
        string firma = subject.ToUpper().Contains("PEDIDO") ? GetSignature("oferta") : GetSignature("default");

        mail.HTMLBody += firma;

        if (mail != null) Marshal.ReleaseComObject(mail);

    }


    // Finds and returns the .htm signature file.       
    private string GetSignature(string signatureName)
    {
        string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\Microsoft\Signatures";
        string signature = string.Empty;
        DirectoryInfo diInfo = new DirectoryInfo(appDataDir);

        if (diInfo.Exists)
        {
            FileInfo[] fiSignature = diInfo.GetFiles(signatureName + ".htm");

            if (fiSignature.Length > 0)
            {
                StreamReader sr = new StreamReader(fiSignature[0].FullName, Encoding.Default);
                signature = sr.ReadToEnd();

                if (!string.IsNullOrEmpty(signature))
                {
                    string fileName = fiSignature[0].Name.Replace(fiSignature[0].Extension, string.Empty);
                    signature = signature.Replace(fileName + "_files/", appDataDir + "/" + fileName + "_files/");
                }
            }
        }
        return signature;
    }

}

当然 - 图片作为单独的附件添加,您永远不会处理它们。

此外,连接两个 HTML 字符串 (mail.HTMLBody += firma;) 不一定会生成有效的 HTML 字符串。

如果使用 Redemption is an option (I am its author), it exposes RDOSignature.ApplyTo 方法,将插入包括其附件和样式的签名。