在Outlook 2007或更高版本中控制加密和数字签名按钮

时间:2011-07-21 20:56:31

标签: .net vba outlook-2007

我正在使用VBA中的一个小脚本,它允许我自动转发消息,包括加密消息。

我唯一的问题是以编程方式删除加密。

我以为我可以这样做:

  • 打开邮件
  • 取消选择加密&签署选项
  • 转发消息

通过这种方法,我不知道如何获得对Encrypt& amp;的引用。签名按钮。

这是适用于标准非加密邮件的代码。我将此方法设置为所有传入邮件的“电子邮件规则”:

Sub test_macro(MyMail As MailItem)
    MyMail.Display
    'Need some API here to access the decrypt button    


    MyMail.Recipients.Add "otheraddress@company.com"
    MyMail.Recipients.Add "otheraddress2@company.com"
    Item_Send (MyMail)


End Sub

背景

此处需要将部门地址的所有传入消息转发给某些人。转发它们加密会导致各种版本的Outlook(2003/2007/2010 / etc)之间出现各种证书问题,因为它们都需要拥有部门地址的私钥并且似乎与他们的个人帐户证书冲突(我得到所有有点不稳定的行为,有时它有效,有时不行。)

替代方法

  • 我意识到由于安全限制,目前的方法可能不会有效,所以我正在研究替代方案。也许如果我为Outlook创建一个插件,是否会让我访问一些安全API来解密收到的消息?

  • 创建POP客户端,获取,手动解密消息并转发它。这可能是最难的方法,因为默认情况下Outlook支持许多加密格式/算法。

还有其他想法吗?谢谢!

3 个答案:

答案 0 :(得分:3)

我知道这是一个较旧的线程,但对于那些感兴趣的人,在下面引用的VBA文章中显示了以编程方式切换(启用或禁用)签名和以编程方式切换加密(以及检查签名和加密)的正确方法。这也可以在.NET中进行微调

https://support2.microsoft.com/kb/2636465?wa=wsignin1.0

例如,可以在Outlook 2007,2010,2013中使用以下C#.NET函数以编程方式检查电子邮件项是否已加密:

public static bool isEmailEncrypted(ref Outlook.MailItem mItem) {
        bool retVal = false;
        string PR_SECURITY_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x6E010003";
        long flags = (long)mItem.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS);
        //need to do bitwise AND operation
        long bitwiseAND = flags & 1; //encrypted bit is the first bit
        if (bitwiseAND == 1) {
            retVal = true;
        }
        return retVal;
    }

答案 1 :(得分:0)

我认为它必须是MailItem对象中的一个方法,但是没有MailItem.Encrypt()函数。

这需要一段时间才能找到: http://support.microsoft.com/?kbid=279013

我认为没有办法以您想要的方式执行您想要的方式,但也许您可以使用该链接上的信息创建一个自定义邮件消息表单,其中MailItem作为输入并在之后发送。< / p>

答案 2 :(得分:0)

我最终使用优秀的库Mail.dll创建了一个IMAP电子邮件客户端。我强烈推荐这个用于电子邮件的东西 - 很棒的文档,很棒的支持!