【问题标题】:An existing connection was forcibly closed by the remote host in SMTP clientSMTP 客户端中的远程主机强制关闭现有连接
【发布时间】:2011-02-04 06:44:56
【问题描述】:

我要放弃调试SMTP服务器发送邮件了……我的代码如下

 SmtpClient mailClient = new SmtpClient("plus.smtp.mail.yahoo.com", 465);
    mailClient.EnableSsl = true;
    MailMessage message = new MailMessage();
    message.To.Add("aditya15417@hotmail.com");
    message.Subject = "permias-tucson-contact-us";
    mailClient.Credentials = new NetworkCredential("myemail@yahoo.com", "mypassword");
    MailAddress fromAddress = new MailAddress(Email.Text, Name.Text);
    message.From = fromAddress;

    mailClient.Send(message);

【问题讨论】:

  • 如果没有使用用户名和密码登录 SMTP 服务器,您将无法发送电子邮件。您可能应该创建一个单独的电子邮件帐户来发送邮件。
  • 我这样做了...更新了上面的代码,它仍然给出了同样的错误
  • 我遇到了同样的问题,但时断时续。例如,当遍历 3000 个收件人并发送 3000 封电子邮件时,它会在发送的 100 封电子邮件中随机抛出此错误,但其余的都会正常。它也可能发生在单独发送一封电子邮件时。电子邮件对我来说表现得非常不可靠,我也不知道我还能做些什么来首次亮相。你的运气好吗??

标签: c# .net exception-handling smtp


【解决方案1】:

您需要传递登录凭据:

mailClient.Credentials = new NetworkCredential(Email.Text, password)

【讨论】:

  • 所以我应该知道发件人的密码是什么??
  • 是的,您需要用户名和密码。在雅虎的情况下,我认为用户名是电子邮件地址。如果 SMTP 不需要身份验证,那么任何人都可以使用它来发送垃圾邮件。
  • 不,我不认为凭据是问题所在。无论有没有凭据,此问题都可能间歇性发生。
  • @Aaron:这是服务器问题。
【解决方案2】:

这是一个完整的工作示例:

public class Program
{
    static void Main(string[] args)
    {
        using (var client = new SmtpClient("smtp.mail.yahoo.com", 587))
        {
            client.Credentials = new NetworkCredential("youraccount@yahoo.com", "secret");
            var mail = new MailMessage();
            mail.From = new MailAddress("youraccount@yahoo.com");
            mail.To.Add("destaccount@gmail.com");
            mail.Subject = "Test mail";
            mail.Body = "test body";
            client.Send(mail);
        }
    }
}

确保您更换您的帐户和密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 2011-01-06
    • 1970-01-01
    • 2020-04-20
    • 2019-01-14
    • 2014-01-12
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多