我正在使用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消息)
答案 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的了解有限,我不知道其他选择。