使用 asp.net core 3.1 我可以使用以下代碼發送電子郵件:
代碼片段 1使用System.Net.Mail.SmtpClient
using (System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient())
{
smtp.Host = "mail.my-real-domain-name.com";
smtp.EnableSsl = false;
NetworkCredential credential = new NetworkCredential(emailModel.From,
emailModel.Password);
smtp.UseDefaultCredentials = false;
smtp.Credentials = credential;
smtp.Send(mm);
}
但是當我嘗試使用 MailKit 發送電子郵件時,它沒有連接到郵件服務器
MailKit 檔案中的代碼片段 2
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
client.Connect("mail.my-real-domain-name.com",0,false);
client.Authenticate(emailModel.From, emailModel.Password);
client.Send(message);
client.Disconnect(true);
}
使用 MailKit的代碼片段 1有什么區別?
以下行均無效,因此我想知道如何在不使用 MailKit 指定埠號的情況下發送電子郵件。它不會拋出任何錯誤,只是沒有連接,我的意思是它停留在 client.Connect 行中。
// client.Connect("mail.my-real-domain-name.com", 465);
// client.Connect("mail.my-real-domain-name.com", 465, true);
// client.Connect("mail.my-real-domain-name.com", 25, false);
// client.Connect("mail.my-real-domain-name.com", 2525, false);
// client.Connect("mail.my-real-domain-name.com", 587,MailKit.Security.SecureSocketOptions.StartTls);
郵件套件
uj5u.com熱心網友回復:
如果您在 Initialize() 方法中查看SmtpClient.cs參考源:
- 如果埠 == 0
- 如果有可用的 MailConfiguration XML 檔案,它將使用 XML 中的指定埠(默認為埠 25):https://referencesource.microsoft.com/#System/net/System/Net/Configuration/SmtpNetworkElement.cs, e4c99455ef3ea37c
- 否則,如果沒有 XML 組態檔,則使用
defaultPort設定為 25 的靜態成員。
因此,要獲得與 System.Net.Mail 相同的行為,請使用埠 25。
MailKit 還將在Connect()呼叫中接受 port = 0 ,并且根據 SecureSocketOptions 引數的不同,它將在ComputeDefaultValues()方法中選擇適當的默認埠:https ://github.com/jstedfast/MailKit/blob/master/MailKit/Net /Smtp/SmtpClient.cs#L1253
如果埠 == 0,那么如果 useSsl=true 或 socketOptions=SslOnConnect,則選擇 465 埠,否則選擇 25 埠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422424.html
標籤:
