无法使用mailkit向yahoo发送电子邮件

无法使用mailkit向yahoo发送电子邮件,yahoo,mailkit,Yahoo,Mailkit,我正在创建一个系统,向我们的客户发送电子邮件、定价、订单、发票等。但由于最终收到的电子邮件数量有限,我们在尝试通过gmail或任何其他邮件客户端发送邮件时遇到了限制。由于这些都是客户特定的电子邮件,使用批量发送客户端并不理想 因此,我创建了一个系统,使用mailkit和其他工具从我们自己的服务器发送电子邮件,而无需设置中继或电子邮件服务器进行发送。这对每个人都很有效,除了雅虎,Gmail,outlook等等。由于某种原因,当我连接,mailkit试图通过startstl切换到STL时,yahoo

我正在创建一个系统,向我们的客户发送电子邮件、定价、订单、发票等。但由于最终收到的电子邮件数量有限,我们在尝试通过gmail或任何其他邮件客户端发送邮件时遇到了限制。由于这些都是客户特定的电子邮件,使用批量发送客户端并不理想

因此,我创建了一个系统,使用mailkit和其他工具从我们自己的服务器发送电子邮件,而无需设置中继或电子邮件服务器进行发送。这对每个人都很有效,除了雅虎,Gmail,outlook等等。由于某种原因,当我连接,mailkit试图通过startstl切换到STL时,yahoo发送垃圾,mailkit失败

我已经启用了所有ssl和tsl协议。我让ServerCertificateValidationCallback始终返回true。事实上,甚至不会调用ServerCertificateValidationCallback

引发的错误以以下内容开头: 调用SSPI失败,请参阅内部异常

然后 收到的消息是意外的或格式不正确

如果我尝试连接到任何其他SMTP端口465或587,系统将挂起

这一切都发生在连接时,电子邮件发送之前。因此,这不可能是DKIM问题。并且SPF记录设置正确。我们没有反向dns设置,因为我们计划从具有不同IP的多个服务器发送

我不知道为什么雅虎如此困难

尝试与MailKit交谈,尝试允许所有TLS和SSL连接。试图找到任何雅虎的支持

using (var client = new SmtpClient())
{
    client.LocalDomain = "MyDomain";

    // right now we don't care about all SSL certificates (in case the server supports STARTTLS)
    client.ServerCertificateValidationCallback = (s, c, h, e) => {
        return true;
    };
    client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11 |
    System.Security.Authentication.SslProtocols.Tls12 |
    System.Security.Authentication.SslProtocols.Tls |
    System.Security.Authentication.SslProtocols.Ssl3 |
    System.Security.Authentication.SslProtocols.Ssl2;
    client.CheckCertificateRevocation = false;

    client.Connect("mta6.am0.yahoodns.net", 25, false); //<--- fails here

    client.Send("test", fromMailBoxAddress, recipientsEmailBoxAddresses);

    client.Disconnect(true);
}
使用client.Connectmta6.am0.yahoodns.net,25,SecureSocketOptions.None;如果要禁用STARTTLS或使用client.Connectsmtp.mail.yahoo.com,587,SecureSocketOptions.Auto;这很好用


我不知道你从哪里获得mta6.am0.yahoodns.net,但我甚至无法与该地址建立正常的套接字连接。

回答你的问题,我可能知道为什么Yahoo如此困难-这可能是你的消息构造。验证您的mimessage是否与发件人和发件人的电子邮件地址完全相同。确保您的回复仅包含发件人电子邮件地址。我在回复中有发件人和收件人的电子邮件地址,雅虎不喜欢这样。当然,您正在使用Yahoo应用程序密码进行身份验证。一旦我做了这两个改变,雅虎成功地发送了电子邮件

背景

研究

糟糕的消息结构破坏了雅虎的众多政策之一。这只发生在通过雅虎的SMTP上。通过Gmail和Outlook发送的SMTP工作正常。我一直在比较简单的MailMessage和mimessage消息结构。MailMessage发送,MimemMessage失败,我一直收到550个请求失败;邮箱不可用,每次都有来自雅虎的回复。我使用ProtocolLogger进行了验证。我的发件人是空的,这是一个问题,我的回复中有收件人。如果我只是将发送者添加到ReplyTo,它仍然会抛出相同的错误。我必须确保发件人是回复中唯一的电子邮件


希望这能有所帮助。

我尝试了SecureSocketOptions。没有,但后来我发现一些错误,用户抱怨来自我的IP的垃圾邮件。我从未从此IP发送过电子邮件,我检查了所有黑名单,我不知道其中的任何位置。mta6.am0.yahoodns.net来自他们的mx记录。您的SSL/TLS选项不会产生或破坏任何垃圾邮件分类,因此这没有意义。我同意。我已经向雅虎提交了一个案例,但我希望没有回应。这就是为什么我试图让starttls正常工作。我假设他们不允许任何不使用SSL的人与服务器对话,并且当忽略starttls时,他们抛出了一个误报。谢谢你的输入。但我并不是想从雅虎发送邮件,我是想发送给雅虎。我有很多客户有雅虎电子邮件,我需要能够发送发票和信息给他们。我试图通过电子邮件服务器发送邮件,但雅虎拒绝了我尝试的一切。尽管所有的邮件测试网站都给了我一个完美的10分。
client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
client.DeliveryStatusNotificationType = mail.DeliveryStatusNotificationType.Full;
await client.ConnectAsync("smtp.mail.yahoo.com", 587, SecureSocketOptions.StartTls);
await client.AuthenticateAsync(yourEmailAddress@yahoo.com, yourYahooAppPassword);
await client.SendAsync(Message);
await client.DisconnectAsync(true);