system.net.mail中的C#smtp配置

本文关键字:C#smtp 配置 中的 mail net system | 更新日期: 2023-09-27 18:21:09

我有一个小的WinForms应用程序,可以发送通知电子邮件。它适用于outlook客户端,但如果输入gmail/yahoo/windowslive地址,它就会爆炸。我看过很多使用system.web.mail和架构的帖子,但Visual Studio 2010在尝试使用它时给了我一个错误(我认为是因为.Net 2.0)。是否可以将我的smtp客户端代码配置为中继到所有这些电子邮件提供程序?

我使用system.net.mail和MailMessage。我的配置代码如下。。。

SmtpClient mailSender = new SmtpClient("smtp.myclient.com");
            mailSender.EnableSsl = true;
            mailSender.Send(message);

system.net.mail中的C#smtp配置

它适用于Outlook客户端,因为工作站(可能)已登录到Active Directory域,并且Exchange服务器因此"信任"该连接。

你需要在邮件服务上添加用户的凭据,你必须从用户那里获得它们:

 mailsender.Credentials = new NetworkCredential(username, password);

另外,不要忘记为SSL设置Port属性。有些供应商不使用标准供应商。

如果您的应用程序与outlook客户端一起工作,则应用程序会正确发送电子邮件。网址的唯一区别是电子邮件的显示方式,所以问题可能出在编码上。你能详细说明应用程序爆炸的含义吗?

即使您提供给邮件服务器的凭据本身是可以的,但"发件人"字段与特定用户不匹配,您也可以收到异常消息。(这是一项功能,是SMTP服务器为防止欺骗发件人而实施的限制。SMTP协议本身非常自由,理论上你可以将任何电子邮件地址写入"发件人"字段。防止欺骗对于打击垃圾邮件非常重要。)

一般来说,如果你做错了什么,你会收到一个SmtpException,它出乎意料地具有描述性。有时,嵌入的内部异常会区分更多的情况。你只需要调试各种情况,我整理了一些:

  1. 如果电子邮件的"发件人"地址与经过身份验证的用户有权使用的电子邮件地址不匹配,您将收到一个SmtpException,上面写着"邮箱不可用"answers"客户端无权作为此发件人发送"
  2. 如果指定了错误的主机或端口,SmtpException消息将以"Mailbox available"开头。它将有一个WebException类型的内部异常,表示"Unable to connect to the remote server",该内部异常本身将有SocketException类型,表示"由于目标计算机主动拒绝,无法建立连接"
  3. 如果您打开了SSL(mailSender.EnableSsl=true;//对于您的代码),但SMTP服务器不支持它,或者反过来,您会得到一个SmtpException,上面写着"服务器不支持安全连接"
  4. 如果凭据(用户名/密码)错误或出现其他SSL问题,您将收到一个SmtpExeption,上面写着"SMTP服务器需要安全连接或客户端未通过身份验证"

另一件需要注意的事情是如何准确地创建NetworkCredential对象。

System.Net.Mail非常方便!