从.NET应用程序发送电子邮件的最佳方法?

时间:2020-03-05 18:51:56  来源:igfitidea点击:

我正在使用Windows窗体(.NET 3.5)应用程序,该应用程序具有内置的异常处理程序,以捕获可能出现的任何(禁止使用天堂)异常。我希望异常处理程序能够提示用户单击"发送错误报告"按钮,这将使应用程序将电子邮件发送到我的FogBugz电子邮件地址。

最好的方法是什么,是否有任何需要注意的"陷阱"?

解决方案

回答

我们将要使用此处概述的SmtpClient类。
发送电子邮件几乎没有那么容易。

回答

我们可能还想查看第三方的aspNetEmail库,它具有许多有用的功能,可以提供System.Net.Mail所提供的功能。

回答

在受控环境中,使用SmtpClient将是答案。但是在用户的计算机上,我们将需要SMTP服务器进行发送。

我们可以提示用户输入其SMTP凭据,但是我认为这对情况不切实际。作为用户,我不想将我的SMTP凭据提供给随机应用程序(认为是SPAM)。我们也不想将自己的SMTP凭据硬编码到应用程序中,对于恶意用户来说,嗅探这些凭据并使用服务器发送SPAM并不容易。

理想情况下,我们将能够使用用户的邮件代理发送电子邮件。我以为我们可能可以制定和执行mailto:URL,但是不确定是否可以指定邮件的正文或者任何附件。

回答

我们无需担心客户端凭据,只需按照Esteban的建议使用SmtpClient。我们将需要用户在配置时提供有效的Smtp服务器url,但是大多数ISP允许匿名smtp,只要我们在其网络(他们的客户端之一)上,只要用户为他们的ISPs smptp服务器输入url,那么大多数人不会有任何问题。

注意:.config文件中有一个预定义的部分,用于存储SmtpClient对象的配置选项。如果在其中放置设置,则在发送电子邮件时不必在代码中显式设置任何内容。该部分的示例如下:

<system.net>
   <mailSettings>
      <smtp deliveryMethod="Network" from="[email protected]">
         <network host="smtp.somewhere.com.au" />
      </smtp>
   </mailSettings>
</system.net>

用户名和密码是可选的。 Intellisense适用于配置文件的这些部分。

编辑:对我的代码示例稍作更正。

回答

我们提到我们正在使用Fogbugz。

尝试http://www.fogcreek.com/FogBugz/docs/60/topics/customers/BugzScout.html?isl=59722
或者http://www.fogcreek.com/FogBugz/blog/post/C-wrapper-for-the-FogBugz-API.aspx?isl=59722

我想在FB安装目录中有一些示例代码。
我检查了Michael Pryor的re:许可,他说使用他们的代码很好,但是使用YMMV,所以我要检查。

它提供了一个很好的起点。

回答

You'll want to use the SmtpClient class as outlined here.
  There are no gotchas - sending email is about as easy as it gets.

广泛的System.Net.Mail常见问题解答位于此处。