我正在使用 VSTO 编写 Outlook 2010 加载项,其中一部分将自动将正确的电子邮件签名添加到新的 AppointmentItem。我遇到的问题是如何确定哪个签名是正确的。例如,我在 Outlook 中设置了 2 个电子邮件签名,它们根据我的电子邮件来自哪个地址制定了使用规则。如何访问这些规则?
我的问题不在于找到签名文件,而在于根据用户的设置应用正确的规则。有任何想法吗?
您可以使用以下代码访问规则。您可以遍历它们并获取规则类型和操作
app 是 Outlook.Application 的当前实例
Outlook.Rules rules= app.Session.DefaultStore.GetRules();
foreach (Outlook.Rule r in rules)
{
}
我最终通过创建一个字典对象来解决这个问题,其中键是电子邮件地址,值是文件路径:
private Dictionary<string, string> signatureDictionary()
{
string sigDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Signatures";
Dictionary<string, string> returnValue = new Dictionary<string,string>();
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676", false);
string[] str = key.GetSubKeyNames();
foreach (string s in str)
{
Microsoft.Win32.RegistryKey subKey = key.OpenSubKey(s, false);
if (subKey.GetValue("New Signature") != null)
{
returnValue.Add(System.Text.Encoding.Unicode.GetString(subKey.GetValue("Account Name") as
Byte[],0,(subKey.GetValue("Account Name") as Byte[]).Length - 2)
, Path.Combine(sigDataDir,System.Text.Encoding.Unicode.GetString(
subKey.GetValue("New Signature") as Byte[], 0, (subKey.GetValue("New Signature") as
Byte[]).Length - 2) + @".rtf"));
}
}
key.Close();
return returnValue;
}
这个对类似问题的回答最初为我指明了正确的方向,并发现只有在为该帐户设置了签名时才会填充“新签名”密钥。毫无疑问,在某些情况下这不起作用,但它可以解决我当前的问题。由于我在 VSTO 中编辑电子邮件时使用 WordEditor,因此我在此功能中使用 RTF 文件,但同一目录中也有 .HTM 和 .TXT 文件,因此您可以根据需要使用它们。