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

时间:2016-07-28 05:34:09

标签: c# python email encryption outlook

我是一名新程序员,而且我已经达到了我(C#和VBA语言)缺乏知识和经验阻碍我继续学习计划的程度。我只知道Python,我尝试过的所有文档都是用C#和VB编写的。

我的故事:我正在开发一个GUI,使用Outlook Express 2016自动化和管理我公司的专门电子邮件操作。我已经发现win32com是要使用的软件包,而且我是'我想出了如何创建和发送基本电子邮件,但我很难弄清楚如何发送加密的电子邮件。我的公司使用McAfee http://www.mcafee.com/us/downloads/saas/encrypted-from-microsoft-outlook-addin.aspx上的McAfee SaaS Email Encryption加载项。

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

我从其他类似帖子中获得的是我需要使用PropertyAccessor方法:

mailItem.PropertyAccessor.SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0xHHHHHHHH", x);

其中HHHHHHHH是一些十六进制代码,x表示诸如0 = off的状态。我试着深入研究一些属性标签文档,但我无法理解它们。

我是否在正确的轨道上?可能有一种完全不同的+更简单的方法。我确实意识到我的很多困难可能是由于不了解C#/ VBA,但如果那里有人能指出我正确的方向,我将非常感激。

1 个答案:

答案 0 :(得分:1)

  1. 首先,您需要向您要使用的电子邮件地址发出安全电子邮件证书。 让我们说这是mymail.somecompany.com。您的证书应在主题名称中包含此名称 并应启用安全电子邮件。

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

  3. 接下来,您需要拥有一个要签名和发送的实体。   string strbody = @" Content-Type:text / plain; charset ="" iso-8859-1"" Content-Transfer-Encoding:quoted-printable

  4. 这是测试s / mime消息&#34 ;; 这是一个不太直观的地方,因为没有编程方式来创建您要发送的电子邮件实体 注意标题和一系列两个\ r \ n在实体主体之前"这是一个测试s / mime"消息开始

    1. 接下来,您需要为此内容生成签名信封

      byte [] data = Encoding.ASCII.GetBytes(strbody);   ContentInfo content = new ContentInfo(data);   SignedCms signedCms = new SignedCms(content,false);   CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber,certificate);
        signedCms.ComputeSignature(签名者);   byte [] signedbytes = signedCms.Encode();

    2. 现在,您要发送的内容已使用您需要的证书进行签名 创建邮件消息对象并创建备用视图并将其添加到备用视图集合

      MailMessage msg = new MailMessage();   msg.From =新邮件地址("");   msg.To.Add(新邮件地址(""));   msg.Subject =" test s / mime&#34 ;;

      MemoryStream ms = new MemoryStream(signedbytes);   AlternateView av = new AlternateView(ms," application / pkcs7-mime; smime-type = signed-data; name = smime.p7m");   msg.AlternateViews.Add(AV);

    3. 现在您已准备好消息,您可以发送它   SmtpClient客户端=新的SmtpClient(" smtphost",25);   client.UseDefaultCredentials = true;   client.Send(MSG);

    4. 此时这是一种黑客攻击,需要对实体主体进行一些手动准备 你想签名。我需要对此进行更多的研究,并找出是否有更好的方法来做到这一点。