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
方法,将插入包括其附件和样式的签名。
我不得不编写我的第一个 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
方法,将插入包括其附件和样式的签名。