我是一名新程序员,而且我已经达到了我(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,但如果那里有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:1)
首先,您需要向您要使用的电子邮件地址发出安全电子邮件证书。 让我们说这是mymail.somecompany.com。您的证书应在主题名称中包含此名称 并应启用安全电子邮件。
接下来,您需要以编程方式从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; 打破; } }
接下来,您需要拥有一个要签名和发送的实体。 string strbody = @" Content-Type:text / plain; charset ="" iso-8859-1"" Content-Transfer-Encoding:quoted-printable
这是测试s / mime消息&#34 ;; 这是一个不太直观的地方,因为没有编程方式来创建您要发送的电子邮件实体 注意标题和一系列两个\ r \ n在实体主体之前"这是一个测试s / mime"消息开始
接下来,您需要为此内容生成签名信封
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();
现在,您要发送的内容已使用您需要的证书进行签名 创建邮件消息对象并创建备用视图并将其添加到备用视图集合
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);
现在您已准备好消息,您可以发送它 SmtpClient客户端=新的SmtpClient(" smtphost",25); client.UseDefaultCredentials = true; client.Send(MSG);
此时这是一种黑客攻击,需要对实体主体进行一些手动准备 你想签名。我需要对此进行更多的研究,并找出是否有更好的方法来做到这一点。