- csharp/
- C# 如何使用Python以编程方式在Outlook Express中发送加密电子邮件?
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)
此时这是一种黑客行为,需要对实体体进行一些手动准备
你想签字。我需要做更多的研究,看看是否有更好的方法