亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SmtpClient.Send 卡住

SmtpClient.Send 卡住

C#
大話西游666 2022-06-12 10:49:54
string host = "gauntlet.asoshared.com", username= "[email protected]", pwd = "abc",    from = "[email protected]", to = "[email protected]";int port = 465;var mm = new MailMessage(from, to);mm.Body = "b1";mm.Subject = "s1";mm.IsBodyHtml=false;using (var smtp=new SmtpClient(host, port)) {    smtp.EnableSsl = true;    smtp.Credentials = new NetworkCredential (username, pwd);    smtp.Send(mm);}這一直停留在smtp.Send. 大約 2 分鐘后,我收到超時錯誤。使用 Outlook,它可以完美運行(使用我的真實憑據)。查看 Wireshark,我在運行此代碼時看到 TCP SYN、SYN-ACK、ACK,然后什么也沒有。使用 Outlook 時,后面跟著一個TLSv1.2 Client Helloetc。嘗試在代碼開頭添加以下行:ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;ServicePointManager.Expect100Continue=false;為什么 C# 卡住了,甚至沒有發送Client Hello?當我使用不同的主機時它工作正常。編輯:您可以通過按原樣運行上面的代碼自己重現該問題。您將收到超時錯誤而不是錯誤憑據錯誤,并且使用wireshark,您可以看到C# 甚至沒有嘗試TLS 連接。
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

我認為問題在于隱式 SSL。

System.Net.Mail僅支持“顯式”SSL,如此處所述:

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

通常這是由慣例支配的。在端口 25(正常情況)上運行的 SMTP 使用顯式 SSL。在端口 465 上運行的 SMTPS 使用隱式 SSL。在端口 587 上運行的郵件提交使用顯式 SSL。

25如果允許顯式 SSL,您可以嘗試使用端口。


查看完整回答
反對 回復 2022-06-12
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

這可能是題外話,但我想建議你使用

https://github.com/jstedfast/MailKit

而不是自己創建 smtp 客戶端,這是來自https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official的原因。

SmtpClient 的主要問題是它有一個令人困惑的連接生命周期。連接到 SMTP 服務器可能很耗時,尤其是在啟用身份驗證的情況下,因此每個 SmtpClient 對象都有一個內部連接池。


查看完整回答
反對 回復 2022-06-12
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

試試下面的代碼。


private async Task<bool> SendEmail(string Email, string Message)

    {

        try

        {

            SmtpClient client = new SmtpClient("www.test.com");

                client.UseDefaultCredentials = false;

                client.Credentials = new NetworkCredential("[email protected]", "password");

            MailMessage mailMessage = new MailMessage();

            mailMessage.From = new MailAddress("[email protected]");

            mailMessage.To.Add(Email);

            mailMessage.Body = Message;

            mailMessage.Subject = "abc";

            await client.SendMailAsync(mailMessage);

            return true;

        }

        catch (Exception ex)

        {

            return false;

        }


    }


查看完整回答
反對 回復 2022-06-12
  • 3 回答
  • 0 關注
  • 256 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號