1

我有一个发送通知电子邮件的小型 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);
4

3 回答 3

3

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

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

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

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

于 2012-01-20T22:31:31.583 回答
0

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

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

  1. 如果电子邮件的“发件人”地址与经过身份验证的用户有权获得的电子邮件地址不匹配,您将收到一个 SmtpException 提示“邮箱不可用”。和“客户端无权作为此发件人发送”。
  2. 如果您指定了错误的主机或端口,SmtpException 消息将以“邮箱不可用。”开头,它会有一个 WebException 类型的内部异常,说“无法连接到远程服务器”,它本身就会有一个内部异常一个 SocketException 类型,表示“无法建立连接,因为目标机器主动拒绝了它”。
  3. 如果您打开 SSL(mailSender.EnableSsl = true; // 对于您的代码),但 SMTP 服务器不支持它,或者相反,那么您将收到一个 SmtpException 说“服务器不支持安全连接”。
  4. 如果凭据(用户名/密码)错误或其他一些 SSL 问题情况,您将收到一个 SmtpExeption 提示“SMTP 服务器需要安全连接或客户端未通过身份验证”。

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

System.Net.Mail 非常方便!

于 2013-03-19T17:28:25.673 回答
0

如果您的应用程序与 Outlook 客户端一起使用,那么您的应用程序可以正确发送电子邮件。与网址的唯一区别是电子邮件的显示方式,因此问题可能出在编码上。你能详细说明一下应用程序炸弹是什么意思吗?

于 2012-01-20T22:28:45.143 回答