在C#中发送电子邮件

10

我正在使用 .NET 3.5,并且想要自动发送邮件。目前我正在使用以下代码:

Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
    (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(
     Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
mailMsg.To = recipient;
mailMsg.Subject = subject;
mailMsg.Body = body;
mailMsg.Send();

然而,我发现了几篇文章,似乎暗示我应该使用以下方法:

System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage();
mailmsg.To = recipient;
mailmsg.Subject = subject;
mailmsg.Body = body;

有人能告诉我这两个命名空间之间的区别以及为什么你可能想要使用其中一个而不是另一个吗?

11个回答

10

我认为第一个需要在机器上安装Outlook,以便安装Office Interop组件。而第二个则是纯粹使用.Net框架。


3
值得注意的是,实例化 Outlook 的开销并不轻微。 - Paddy

9
第二个例子需要一个SMTP服务器,以建立直接连接,并使用此SMTP服务器发送电子邮件。它的开销较低,通常可以正常工作。
如果您需要代表当前用户撰写和发送电子邮件,则可以使用Outlook。
到目前为止,我只看到了有关Outlook的缺点的答案。但它也有一些优点:
- 您不必要求用户进行任何配置。 - Outlook已经知道Exchange / SMTP服务器以及用户的电子邮件地址。 - 您发送的电子邮件将存储在用户的发件箱中。因此,用户可以查看以他名义发送的内容。 - 可以使用签名/加密插件或添加标准公司免责声明的插件,以便遵循公司政策。 - 可以提示用户是否允许发送电子邮件(是的,这也可能是一个优点)。 - 您可以选择仅撰写邮件,向用户呈现邮件。用户可以编辑并选择发送或不发送。
编辑:我使用SMTP方法向我们的支持部门发送技术电子邮件(如日志文件和错误消息),这些邮件快速且不引人注目。
我使用Outlook方法代表我的用户向其他人发送邮件。这些邮件速度较慢,但可以跟踪等。

5
第一种方法是使用interop通过创建Outlook实例(outlookApplication)并让该Outlook实例发送电子邮件来发送电子邮件。
第二种方法用于通过常规的SMTP发送电子邮件,不需要Outlook。
除非你有特定的interop需求,否则没有必要使用Outlook发送电子邮件(并且你的代码将无法在未安装Outlook的任何计算机上运行)。

3

第一个使用COM互操作,这是不必要的开销。第二个是纯.NET,具有所有特性。此外,它更加灵活。


3

正如其他人所提到的,第一种方法使用Outlook发送电子邮件。缺点是用户必须安装Outlook;优点是看起来像是Outlook在发送它。

第二种方法将尝试直接发送邮件。优点是不需要安装Outlook,并且开销要小得多。但这种选项的缺点是,现今大多数企业都会阻止25号端口,因此当您尝试发送消息时,它将失败。


2
它们是不同的。 MailItem代表Outlook中的邮件项目。 MailMessage代表可以使用SmtpClient类发送的电子邮件消息。
请查看MailItemMailMessage

2

第一个方法使用COM互操作,并以Outlook为其基础。它需要配置Outlook。第二个方法使用SMTP客户端。使用Interop可能会遇到与Outlook相关的问题,但是可以实现一些很酷的功能,比如打开邮件窗口(但通常不值得这么做)。第二种方法将发送静默邮件,虽然你可以显示自己的窗口,但仍不允许Outlook自动化的灵活性。我的选择是System.Net.Mail.*。


1
第一种方法是使用 MS Office,但您不想发布该文件时,可以使用 System.Net.Mail 做到,只要安装了 .Net 框架即可。

1
第一个例子使用由Office Interop Assemblies下载安装的库。
第二个例子使用由.NET框架默认安装的库,System.Net。
第一个例子使用了Microsoft Interop Libraries。我会选择你的第二个例子,因为它是默认.NET安装的一部分。Interop库将具有不必要的更多开销。

1

Microsoft.Office使用Microsoft Outlook发送电子邮件。它需要安装Outlook,并且(至少在我上次尝试使用此方法发送邮件时)更容易出现问题。(例如,它会提示用户让他们知道一个程序正在代表他们发送邮件等)

System.Net.Mail只使用纯.NET和指定的SMTP服务器发送邮件。相信我...除非有必要,否则避免使用Office。


有一个叫做ClickYes的应用程序可以移除烦人的弹出窗口(或代表您点击它)。链接是http://www.contextmagic.com/express-clickyes/。我必须说我完全同意您使用System.Net.Mail策略而不是使用Outlook或Outlook插件。包装器让我感到非常恼火。 - Koekiebox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接