C# 如何使用Python以编程方式在Outlook Express中发送加密电子邮件?

C# 如何使用Python以编程方式在Outlook Express中发送加密电子邮件?,c#,python,email,encryption,outlook,C#,Python,Email,Encryption,Outlook,我是一名新程序员,由于缺乏(C#和VBA语言)知识和经验,我无法继续编写程序。我只知道Python,而且我试着深入研究的所有文档都是用C#和VB编写的 我的故事:我正在使用Outlook Express 2016为我的公司开发一个GUI,它可以自动化和管理专门的电子邮件操作。我已经知道win32com是要使用的软件包,我已经知道如何创建和发送基本的电子邮件,但我正在努力弄清楚如何发送加密的电子邮件。我的公司使用的McAfee SaaS电子邮件加密加载项位于: 注意:该站点没有指定2016版本支持

我是一名新程序员,由于缺乏(C#和VBA语言)知识和经验,我无法继续编写程序。我只知道Python,而且我试着深入研究的所有文档都是用C#和VB编写的

我的故事:我正在使用Outlook Express 2016为我的公司开发一个GUI,它可以自动化和管理专门的电子邮件操作。我已经知道win32com是要使用的软件包,我已经知道如何创建和发送基本的电子邮件,但我正在努力弄清楚如何发送加密的电子邮件。我的公司使用的McAfee SaaS电子邮件加密加载项位于:

注意:该站点没有指定2016版本支持此加载项,但它确实可以工作。此外,内置的Outlook选项加密所有电子邮件是不可行的,因为我需要一些电子邮件不加密

我从另一篇类似的帖子中了解到,我需要使用PropertyAccessor方法:

mailItem.PropertyAccessor.SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0xHHHHHHHH", x);
其中,
hhhhh
是一些十六进制代码,
x
表示一种状态,例如0=off。我试着深入研究一些属性标签文档,但我很难理解它们

我走对了吗?可能有一种完全不同的更简单的方法。我确实意识到我的很多困难可能是因为不懂C#/VBA,但如果有人能为我指出正确的方向,我将不胜感激

  • 首先,您需要向要使用的电子邮件地址颁发安全电子邮件证书。 假设这是mymail.somecompany.com。您的证书应在主题名称中包含此内容,并应启用安全电子邮件

  • 接下来,您需要以编程方式从pfx文件获取证书或加载,如 X509Store=新的X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.openingonly | OpenFlags.ReadOnly); X509Certificate2Collection certs=存储证书; X509Certificate2证书=null; foreach(X509Certificate2证书中的证书) { if(cert.Subject.IndexOf(“mymail@somecompany.com") >= 0) { 证书=证书; 打破 } }

  • 接下来,您需要有一个要签名和发送的实体。 字符串strbody=@“内容类型:文本/普通;字符集=”“iso-8859-1” 内容传输编码:引用可打印

  • 这是一条测试s/mime消息”; 这是它变得有点不太直观的地方,因为没有编程方法来创建您想要发送的电子邮件实体 请注意实体正文“this is a test s/mime”消息开始之前的标题和一系列\r\n两个标题

  • 接下来,您需要为该内容生成一个签名信封

    byte[]data=Encoding.ASCII.GetBytes(strbody); ContentInfo内容=新的ContentInfo(数据); SignedCms SignedCms=新的SignedCms(内容,假); CmsSigner signer=新的CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber,证书)
    签名CMS.计算签名(签名人); byte[]signedbytes=signedCms.Encode()

  • 现在,您已经拥有了要发送的内容,并使用您选择的证书进行了签名,您需要 创建邮件对象并创建备用视图,然后将其添加到备用视图集合中

    MailMessage msg=新的MailMessage(); msg.From=新邮件地址(“”); msg.To.Add(新邮件地址(“”); msg.Subject=“测试s/mime”

    MemoryStream ms=新的MemoryStream(signedbytes); AlternateView av=新的AlternateView(ms,“应用程序/pkcs7 mime;smime类型=签名数据;名称=smime.p7m”); msg.AlternateViews.Add(av)

  • 既然你已经准备好了信息,你就可以发送了 SmtpClient=新的SmtpClient(“smtphost”,25); client.UseDefaultCredentials=true; client.Send(msg)

  • 此时这是一种黑客行为,需要对实体体进行一些手动准备 你想签字。我需要做更多的研究,看看是否有更好的方法