用C#发送电子邮件

时间:2010-05-28 11:41:04

标签: c# email .net-3.5

我正在使用.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 个答案:

答案 0 :(得分:10)

我认为第一个要求在计算机中安装Outlook,以便安装Office Interop程序集。第二个是纯粹的.Net框架。

答案 1 :(得分:9)

第二个示例需要SMTP服务器才能建立直接连接,并使用此SMTP服务器发送电子邮件。它的开销很低,通常都能正常工作。

如果你需要撰写&发送关于当前用户的行为的电子邮件,您可以使用outlook。

到目前为止,我只看到了前景不利的答案。但它有一些优点:

  • 您无需询问用户任何配置。
    • Outlook已经知道Exchange / SMTP服务器,
    • 以及用户的电子邮件地址
  • 您发送的电子邮件将存储在用户的已发送邮件列表中。因此,用户可以看到以他的名义发送wat。
  • 将使用签署/加密外发电子邮件或添加标准公司免责声明的附加组件,因此您将遵循公司政策
  • 可以提示用户是否允许发送电子邮件(是的,这可能是一个优势)
  • 您可以选择仅撰写邮件,将其呈现给用户。用户可以编辑并选择是否发送。

修改 我使用SMTP方法向我们的支持部门发送技术电子邮件(如日志文件和错误消息),这些邮件快速而不被注意。

我使用Outlook方法将用户的行为发送给其他人的邮件。这些邮件很慢,但可以追踪等等。

答案 2 :(得分:5)

第一种方法是通过创建Outlook实例(outlookApplication)并让该Outlook实例发送电子邮件来使用互操作。

第二个用于通过常规旧SMTP发送电子邮件,根本不需要Outlook。

除非您对互操作有特定需求,否则无需使用outlook发送电子邮件(并且您的代码将无法在未安装Outlook的任何计算机上运行)。

答案 3 :(得分:3)

第一个使用COM互操作,这是不必要的开销。其次是纯粹的.net及其所有功能。此外,它更灵活。

答案 4 :(得分:3)

正如其他人所说,第一个使用outlook发送电子邮件。缺点是用户必须安装Outlook;优点是它看起来像是发送它。

第二种方法将尝试直接发送邮件。优点是它不需要安装outlook,而且开销也少得多。这个选项的缺点是,现在大多数企业都阻塞了端口25,因此当您尝试发送消息时,它将失败。

答案 5 :(得分:2)

他们是不同的。 MailItem表示Outlook中的邮件项。 MailMessage表示可以使用SmtpClient类发送的电子邮件。

检查MailItemMailMessage

答案 6 :(得分:2)

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

答案 7 :(得分:1)

第一个是使用MS Office,当安装.Net框架时,System.Net.Mail可用时,您不想发布它。

答案 8 :(得分:1)

第一个示例使用Office Interop Assemblies下载安装的库。

第二个示例使用默认安装的.NET与.NET框架System.Net。

第一个示例使用Microsoft Interop Libraries。我会选择你的第二个例子,因为它是默认.NET安装的一部分。 Interop库将有更多的开销,也不是必需的。

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

您需要在任何一天使用第二个选项。这是纯粹的.NET。

如果你使用第一个选项,我想Outlook应该已经安装在那台机器上。部署时,如果服务器中未安装MS Office,则会出现问题。