smtp异常“发送邮件失败”

时间:2010-12-23 08:39:06

标签: c# email smtp

我正在使用C#.Net创建一个SMTP邮件应用程序。它适用于Gmail设置,但我必须将其用于连接到VSNL。我收到一个例外:“发送邮件失败”

我的设置看起来很完美。问题是什么?为什么我得到例外?

MailMessage mailMsg = new MailMessage();
MailAddress mailAddress = new MailAddress("mail@vsnl.net");
mailMsg.To.Add(textboxsecondry.Text);
mailMsg.From = mailAddress;

// Subject and Body
mailMsg.Subject = "Testing mail..";
mailMsg.Body = "connection testing..";

SmtpClient smtpClient = new SmtpClient("smtp.vsnl.net", 25);

var credentials = new System.Net.NetworkCredential("mail@vsnl.net", "password");

smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = credentials;
smtpClient.Send(mailMsg);

我得到一个例外......

  

System.IO.IOException:无法从传输连接中读取数据:net_io_connectionclosed。

     

at System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte [] buffer,Int32 offset,Int32 read,Boolean readLine)
      在System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader调用者,布尔值oneLine)
      在System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader调用者)
      在System.Net.Mail.SmtpConnection.GetConnection(字符串主机,Int32端口)       在System.Net.Mail.SmtpTransport.GetConnection(String host,Int32 port)
      在System.Net.Mail.SmtpClient.GetConnection()
      在System.Net.Mail.SmtpClient.Send(MailMessage消息)

7 个答案:

答案 0 :(得分:16)

检查异常的InnerException,应该告诉你失败的原因。

答案 1 :(得分:5)

尝试在try catch块中包装Send调用,以帮助识别潜在问题。 e.g。

 try
 {
     smtpClient.Send(mailMsg);
 }
 catch (Exception ex)
 {
     Console.WriteLine(ex);   //Should print stacktrace + details of inner exception

     if (ex.InnerException != null)
     {
         Console.WriteLine("InnerException is: {0}",ex.InnerException);
     }
 }

此信息有助于确定问题所在......

答案 2 :(得分:1)

确保您的反病毒阻止发送邮件。就我而言,McAfee Access保护规则阻止发送邮件,取消阻止块和报告。

答案 3 :(得分:1)

我使用了一些,但是如果发送邮件失败,我只检查这个:

default value is false;

但不能改为真;

 smtpClient.Port = smtpServerPort;
 smtpClient.UseDefaultCredentials = false;
 smtpClient.Timeout = 100000;
 smtpClient.Credentials = new System.Net.NetworkCredential(mailerEmailAddress, mailerPassword);
 smtpClient.EnableSsl = EnableSsl;

所有功能必须通过try catch包围;

答案 4 :(得分:0)

尝试删除   smtpClient.EnableSsl = true; 我不确定vsnl是否支持SSL以及您正在使用的端口号

答案 5 :(得分:0)

如果没有看到您的代码,很难找到异常的原因。以下是假设:

VSNL的serverHost是 smtp.vsnl.net

例外:

Unable to read data from the transport connection: net_io_connectionclosed

通常只有当用户名或密码 不匹配 时才会出现此异常。

答案 6 :(得分:0)

检查IPv6地址是否引用了本机。在我的情况下,使用机器名称给了我同样的错误。使用ip4地址确实有效(即10.0.0.4)。我摆脱了ipv6,它开始起作用了。

不是我想要的解决方案,但鉴于我对ipv6的了解有限,我不知道其他选择。