【问题标题】:Email to yahoo from C# application error从 C# 应用程序错误向雅虎发送电子邮件
【发布时间】:2012-02-15 22:57:45
【问题描述】:

我可以从我的系统 ping smtp.mail.yahoo.com,但是当我使用 yahoo 地址从以下代码发送电子邮件时,它会给出错误 transport failed to connect to server。 相同的代码成功地从 gmail 帐户发送电子邮件。

我正在为雅虎使用端口 465。

    MailMessage oMsg = new MailMessage();
    oMsg.From = from.Text;
    oMsg.To = to.Text;
    oMsg.Subject = "Hi";
    oMsg.BodyFormat = MailFormat.Html;
    oMsg.Body = msg.Text;


    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", port);
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", host);
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2);

    WebProxy proxy = WebProxy.GetDefaultProxy();
    if (proxy.Address != null)
    {
        oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/urlproxyserver", proxy.Address.Host);
        oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/proxyserverport", proxy.Address.Port);
    }
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",from.Text);
    oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", pass.Text);


    // ADD AN ATTACHMENT.

    /*  MailAttachment oAttch = new MailAttachment(path+ "\\Image.bmp", MailEncoding.Base64);

    oMsg.Attachments.Add(oAttch);*/

    SmtpMail.SmtpServer.Insert(0,host);
    if (proxy.Address != null)
        MessageBox.Show("Sending via proxy settings: " + proxy.Address.ToString());
    try
    {                
        SmtpMail.Send(oMsg);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    oMsg = null;

任何想法为什么会发生此错误?

【问题讨论】:

  • “传输无法连接到服务器”。虽然我可以ping通它

标签: c# winforms email


【解决方案1】:

能够(或不能)ping 主机并不能说明您是否能够连接到该主机上的特定服务。为此,您需要尝试实际建立连接。 (当然,您可以建立连接这一事实并不一定意味着相关服务工作正常。)

通常,最好使用telnet 尝试连接到相关端口上的远程主机。命令行上的语法就是telnet host.fqdn.example.com portnumber。这将告诉您管道的另一端是否有任何东西响应连接尝试,这是确定问题所在的第一步。

其次,通常最好将代码修剪为显示问题行为的最小版本,并包含完整代码以显示问题行为。您在代码中使用了许多我们真的一无所知的变量。

一些 ISP 会阻止与他们自己的邮件服务器以外的主机上的 SMTP 端口的传出连接,以减少传出垃圾邮件的数量。 host 中的值可能有错字?也许您无意中使用了一些意想不到的MailMessage 实现?以此类推。

也就是说,如果您使用代理来使用该代码进行连接,我肯定会首先尝试通过代理手动连接到有问题的邮件服务器。如果这也不起作用,那么您的问题至少与问题中的代码无关,您可以查看其他地方(在这种情况下,一个可能的候选者是 ISP 过滤器;也许他们有一个允许的外部 SMTP 列表主机和雅虎不在吗?)。

【讨论】:

  • 非常感谢您提供如此详细的回复。我使用“smtp.mail.yahoo.com”作为主机,端口 = 465。我使用了 telnet,它显示“无法在端口 465 上打开与主机的连接:连接失败”。这意味着为雅虎启用了其他端口?还是根本无法使用雅虎?
  • 当我尝试连接到该主机和端口时,我的行为似乎非常不稳定,包括在连接到与主机名关联的至少一个 IP 地址时出现超时。 DNS 记录看起来很奇怪。你确定它应该完全像这样工作吗?
  • 是主机 - smtp.mail.yahoo.com 和端口 465。它写在所有教程中:S
  • 我不确定我是否会将“所有教程”视为权威的参考资料,但由于您也无法使用 telnet 进行连接,因此可以肯定地说您遇到了问题比你的 C# 代码低一些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 2019-08-14
  • 2011-06-21
  • 2013-09-30
  • 2014-06-16
相关资源
最近更新 更多