2016-07-28 91 views
1

我是一名新程序員,我已經達到了缺乏知識(C#和VBA語言)和經驗的地步,使我無法繼續執行我的程序。我只知道Python以及我嘗試過的所有文檔都在C#和VB中。如何以編程方式在Outlook Express中使用Python發送加密電子郵件?

我的故事:我正在使用Outlook Express 2016爲我公司自動化和管理專門的電子郵件操作。我已經發現win32com是使用的軟件包,並且我已經計算出如何創建和發送基本的電子郵件,但我很難找出如何發送加密的電子郵件。我的公司使用McAfee SaaS電子郵件加密插件:http://www.mcafee.com/us/downloads/saas/encrypted-from-microsoft-outlook-addin.aspx

注意:該網站並未指定此加載項在2016版本中受支持,但確實有效。此外,內置的Outlook選項來加密所有的電子郵件是不可行的,因爲我需要一些電子郵件不加密。

我從另一個類似的職位囊括什麼是我需要使用方法PropertyAccessor接口:

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

其中HHHHHHHH是一些十六進制代碼,x代表的狀態,如0 =關閉。我試圖挖掘一些財產標籤文檔,但我無法理解它們。

我在正確的軌道上嗎?這可能會有一個完全不同的+更簡單的方法。我意識到我的許多困難可能是由於不知道C#/ VBA所致,但如果有人能指出我正確的方向,我將非常感激。

回答

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(證書中的X509證書2證書) if(cert.Subject.IndexOf(「[email protected]」)> = 0) { certificate = cert; 休息; } }

  3. 接下來你需要有一個你想簽名和發送的實體。 串strbody = @ 「內容類型:文本/無格式;字符集=」 「ISO-8859-1」」 內容傳送編碼:引用可打印

這是一個測試S/MIME消息「; 這是它有點不直觀,因爲沒有創建您想要發送的電子郵件實體的編程方式 請注意標題和一系列兩個\ r \ n在實體正文之前「這是一個測試s/MIME」消息開始

  • 接下來需要生成簽名信封該內容

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

  • 現在,你有你想要送與你的選擇,你需要 創建郵件對象,並創建一個不同的觀點,並添加到您的備用視圖集合

    MAILMESSAGE證書籤名的內容msg = new MailMessage(); msg.From = new MailAddress(「」); msg.To.Add(new MailAddress(「」)); msg.Subject =「test s/mime」;

    MemoryStream ms = new MemoryStream(signedbytes); AlternateView av = new AlternateView(ms,「application/pkcs7-mime; smime-type = signed-data; name = smime.p7m」); msg.AlternateViews.Add(av);現在你已經準備好了你可以發送的消息了 SmtpClient client = new SmtpClient(「smtphost」,25); client.UseDefaultCredentials = true; client.Send(msg);

  • 這是在這個時候是一種黑客,並要求 要簽名的實體主體的一些手工編制。我需要對此做更多的研究,並找出是否有更好的方法來做到這一點。

    相關問題