从Intranet WebApp将加密邮件发送到LotusNotes

时间:2016-08-25 13:02:51

标签: c# .net email encryption lotus-notes

有人可以给我一个关于如何从我的C#.NET应用程序发送加密邮件到Lotus Notes收件箱(在公司内部网中)的起点吗?

我从我们的支持部门请求了证书和Notes用户。

但现在我被卡住了。我仔细阅读了这个guide,并实现了代码,但我知道收件箱中的邮件没有任何内容,只有一个名为smime.p7m的文件。所以我一般不确定这是否是正确的方法。

你能给我一个教程的提示或告诉我我需要做的步骤吗? 或者链接指南一般是正确的,我搞砸了什么?在这种情况下,请发表评论,我将添加我的代码。

非常感谢你!

更新1(26.08.16):

以下是我目前的情况:

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.services.companyname");
smtp.Credentials = new System.Net.NetworkCredential("NOTESUSER","password");
smtp.Send(message);

在Notes本身中,我选中了“发送我的邮件加密”复选框。其背后的想法如下: 我假设这样Notes用户将凭据传递给Smtp服务器并使用usersettings。

电子邮件已发送,但未加密。

2 个答案:

答案 0 :(得分:1)

也许你可以尝试进一步细分事情。如何将来自Thunderbird等基本邮件客户端的加密电子邮件发送给将在其Notes客户端中打开的人?

根本原因是收件人必须具有与您用于加密的公钥对称的私钥。在正常使用中,Domino做得非常好,因为它带有自己的双因素PKI:用户无法在没有私钥的情况下登录,私钥存储在他们的工作站上,名为某个小的(~3 ko)文件例如hername.iduser.id。相应的公钥可供所有人在Domino目录(names.nsf

中查看

虽然基于标准RSA的东西,那些通常的密钥对以非常特定于Domino的方式进行管理和部署。

现在,用户完全可以导入由第三方证书颁发机构颁发的私钥。我现在没有手头的确切程序,您可以在任何Notes客户端可用的help.nsf中找到它。

但我不知道。您位于Intranet内,这意味着you do have access to the Domino Directory,因此是收件人的常用公钥。您的应用程序可能需要自己的user.id,并且您很可能需要在各种防火墙中打出1352个洞。顺便说一句,如果它有助于缓解任何问题,凭借前面提到的本机PKI,很容易从端到端加密端口1352上的通信。

另一种选择如下。 Domino服务器也是Web服务器。有时此选项被激活,有时不激活。如果是,或者您可以实现,该目录可用作Web应用程序。放大用户的公钥需要一些修改和一些HTML解析,但应该可行。

最后一个,虽然您可能不喜欢它:Domino是Intranet应用程序的一个非常好的平台,无论是客户端 - 服务器说服还是HTTP信条。

答案 1 :(得分:0)

好的,这是我最终做的:

Domino.NotesSession nSession = new Domino.NotesSession();
nSession.Initialize("secretpassword"); //password for the Notes User
Domino.NotesDatabase nDatabase = nSession.GetDatabase("SERVER", "names"); //Server and location of the names.nfs file
Domino.NotesDocument nDocument = nDatabase.CreateDocument();
NotesStream nStream;
nDocument.ReplaceItemValue("Subject", tmp.Subject);
nBody = nDocument.CreateMIMEEntity();                
nStream = nSession.CreateStream();
nStream.WriteText(tmp.Body);
nBody.SetContentFromText(nStream , "text/HTML;charset=UTF-8", MIME_ENCODING.ENC_IDENTITY_7BIT);
nDocument.EncryptOnSend = true;
nDocument.Send(false, user.INS_EMAIL);

这将创建一个Notes会话,其中包含最新的Notes用户登录。因此,您在服务器上安装Notes客户端,与用户一起登录,到目前为止一直有效。