Outlook VSTO - 根据用户确定正确的“电子邮件”签名

时间:2012-09-27 21:10:30

标签: outlook vsto

我正在使用VSTO编写Outlook 2010加载项,其中一部分会自动将正确的电子邮件签名添加到新的AppointmentItem。我遇到的问题是如何确定哪个签名是正确的。例如,我在Outlook中设置了2个电子邮件签名,其中包含基于我的电子邮件来自哪个地址的使用规则。我如何访问这些规则?

我的问题不在于finding the signature files,而在于根据用户的设置应用正确的规则。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码访问规则。您可以遍历它们并获取规则类型和操作

app是Outlook.Application的当前实例

Outlook.Rules rules= app.Session.DefaultStore.GetRules();
foreach (Outlook.Rule r in rules)
{

}

答案 1 :(得分:0)

我最后通过创建一个字典对象来解决这个问题,其中键是电子邮件地址,值是文件路径:

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;
        }

This answer一个类似的问题最初指向了正确的方向,并确定只有在为该帐户设置了签名时才会填充“新签名”密钥。毫无疑问会出现这种情况不起作用的情况,但它会对我当前的问题进行排序。由于我在VSTO中编辑电子邮件时使用WordEditor,因此我在此功能中使用RTF文件,但同一目录中也有.HTM和.TXT文件,因此您可以根据需要使用这些文件。