Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# smtp例外情况“;发送邮件失败“;_C#_Email_Smtp - Fatal编程技术网

C# smtp例外情况“;发送邮件失败“;

C# smtp例外情况“;发送邮件失败“;,c#,email,smtp,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

我正在用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:无法从传输连接读取数据:网络IO连接已关闭

在System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(字节[]缓冲区、Int32偏移量、Int32读取、布尔读取行)中
在System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader调用者,布尔oneLine)
在System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader调用者)
位于System.Net.Mail.SmtpConnection.GetConnection(字符串主机,Int32端口) 位于System.Net.Mail.SmtpTransport.GetConnection(字符串主机,Int32端口)
在System.Net.Mail.SmtpClient.GetConnection()上 在System.Net.Mail.SmtpClient.Send(邮件消息)上


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

尝试将
Send
调用包装在Try-catch块中,以帮助识别潜在问题。 e、 g

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

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

请确保您的防病毒软件正在阻止发送邮件。在我的例子中,McAfee访问保护规则阻止发送邮件、取消锁定块和报告。

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

VSNL的服务器主机是smtp.VSNL.net

例外情况:

Unable to read data from the transport connection: net_io_connectionclosed

通常,只有当用户名或密码不匹配时才会发生此异常。请检查机器是否被IPv6地址引用。在我的例子中,使用机器名给了我同样的错误。使用ip4地址,它确实有效(即10.0.0.4)。我摆脱了ipv6,它开始工作了


这不是我一直在寻找的解决方案,但鉴于我对ipv6的了解有限,我不知道还有其他选择。

我使用了一些解决方案,但我只在发送邮件失败时检查此选项:

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环绕

你能发布异常的全部内容,以及堆栈跟踪的任何相关部分吗?我的异常是抛出“发送邮件失败”。看到这个,这里有更多选项。我希望能帮助你:)需要更多的解释。如果我没有这样做的话,那可能会变得一团糟
 smtpClient.Port = smtpServerPort;
 smtpClient.UseDefaultCredentials = false;
 smtpClient.Timeout = 100000;
 smtpClient.Credentials = new System.Net.NetworkCredential(mailerEmailAddress, mailerPassword);
 smtpClient.EnableSsl = EnableSsl;