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);
它适用于Outlook客户端,因为工作站(可能)已登录到Active Directory域,并且Exchange服务器因此"信任"该连接。
你需要在邮件服务上添加用户的凭据,你必须从用户那里获得它们:
mailsender.Credentials = new NetworkCredential(username, password);
另外,不要忘记为SSL设置Port属性。有些供应商不使用标准供应商。
如果您的应用程序与outlook客户端一起工作,则应用程序会正确发送电子邮件。网址的唯一区别是电子邮件的显示方式,所以问题可能出在编码上。你能详细说明应用程序爆炸的含义吗?
即使您提供给邮件服务器的凭据本身是可以的,但"发件人"字段与特定用户不匹配,您也可以收到异常消息。(这是一项功能,是SMTP服务器为防止欺骗发件人而实施的限制。SMTP协议本身非常自由,理论上你可以将任何电子邮件地址写入"发件人"字段。防止欺骗对于打击垃圾邮件非常重要。)
一般来说,如果你做错了什么,你会收到一个SmtpException,它出乎意料地具有描述性。有时,嵌入的内部异常会区分更多的情况。你只需要调试各种情况,我整理了一些:
- 如果电子邮件的"发件人"地址与经过身份验证的用户有权使用的电子邮件地址不匹配,您将收到一个SmtpException,上面写着"邮箱不可用"answers"客户端无权作为此发件人发送"
- 如果指定了错误的主机或端口,SmtpException消息将以"Mailbox available"开头。它将有一个WebException类型的内部异常,表示"Unable to connect to the remote server",该内部异常本身将有SocketException类型,表示"由于目标计算机主动拒绝,无法建立连接"
- 如果您打开了SSL(mailSender.EnableSsl=true;//对于您的代码),但SMTP服务器不支持它,或者反过来,您会得到一个SmtpException,上面写着"服务器不支持安全连接"
- 如果凭据(用户名/密码)错误或出现其他SSL问题,您将收到一个SmtpExeption,上面写着"SMTP服务器需要安全连接或客户端未通过身份验证"
另一件需要注意的事情是如何准确地创建NetworkCredential对象。
System.Net.Mail非常方便!