smtpclient.send 在尝试通过 Office 365 发送电子邮件时挂起

Posted

技术标签:

【中文标题】smtpclient.send 在尝试通过 Office 365 发送电子邮件时挂起【英文标题】:smtpclient.send hangs while trying to send email via office 365 【发布时间】:2022-01-18 01:58:59 【问题描述】:

我正在使用此代码通过 o​​ffice 365 交换服务器发送电子邮件。

var server = "smtp.office365.com";
            var port = 587;
            var username = "user@domain.com";
            var password = "password";

            var to = "test@domain.com";
            var subject = "test message";
            var body = "test message";

            var smtpClient = new SmtpClient(server, port)
            
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(username, password),
                DeliveryMethod = SmtpDeliveryMethod.Network,
                EnableSsl = true
            ;

            var messsage = new MailMessage(username, to, subject, body);

            try
            
                smtpClient.Send(messsage);
                Console.WriteLine("Mail sent completed");

            
            catch (Exception ex)
            
                Console.Error.WriteLine(ex.ToString());
            

我的代码只是挂在 smtpClient.Send(messsage);

我可以使用此帐户发送电子邮件。该帐户未启用 2FA。我也没有看到任何人有类似的问题。任何帮助将不胜感激。

谢谢 提克卢

【问题讨论】:

您是否尝试过使用 Fiddler 来了解幕后情况? 【参考方案1】:

希望这可能会有所帮助:

    将 smtpClient 的 Timeout 设置为较低的值,然后查看是否超时,或者等了超过 1 分钟?
smtpClient.Timeout = 100;
    启动 Wireshark 以分析网络中的 smtp 流量。找出服务器是否回答。 检查您机器的防火墙选项 检查那里的所有参数 在机器上尝试使用相同选项的另一个邮件客户端 可能有帮助的测试工具:https://testconnectivity.microsoft.com/tests/o365 尝试远程登录https://docs.microsoft.com/en-us/Exchange/mail-flow/test-smtp-with-telnet?view=exchserver-2019

【讨论】:

我已经在使用 Outlook,而且效果很好。但据我所知,outlook 使用与 smtp 不同的协议连接到交换服务器。我一定会更改超时并检查。顺便说一句,我还从在线 smtp 检查器服务中检查过它,并收到超时错误。和交换服务器设置有关系吗? 那可能是office369会屏蔽其他在线服务,试试低一点:telnetdocs.microsoft.com/en-us/Exchange/mail-flow/…你需要一些东西,你可以在不同的机器上短时间执行不同的网络环境检查,如果它是防火墙的东西还是什么。如果 telnet 抛出错误,主要是它比 Outlook 或其他大 ui 的输出更有用。 通常 Outlook 检查帐户设置,使用域帐户并自动设置所有内容。可能是,你可以在设置里看到,和你的有什么不同,试一试 MS 也有一些新的测试工具:testconnectivity.microsoft.com/tests/o365 可能会帮助你找出问题:testconnectivity.microsoft.com/tests/O365Pop/input 微软似乎默认阻止了 SMTP 身份验证。我已使用此链接 docs.microsoft.com/en-us/exchange/… 中的说明为我用于电子邮件的帐户启用了它【参考方案2】:

按照此过程启用 SMTP 身份验证后

https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

我们能够解决问题

谢谢 提克卢

【讨论】:

2022,我的租户一周岁了 - 从 c# 发送电子邮件没有任何帮助 你能详细点吗?

以上是关于smtpclient.send 在尝试通过 Office 365 发送电子邮件时挂起的主要内容,如果未能解决你的问题,请参考以下文章

腾讯云服务器使用smtp发送邮件

SmtpException:客户端或服务器仅配置为具有 ASCII 本地部分的电子邮件地址

错误 IDENTITY_INSERT 设置为 OFF 但实际上它是 ON

卸载事件off()方法

如何通过 UIswtch 的 on 和 off 控制音频声音

OFF三维显示通过MATLAB读取off文件生成三视图 提取轮廓线