使用 MailKit 发送邮件而不指定端口号

send mail using MailKit without specifying port number

使用 asp.net 核心 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 等于多少?

None 以下几行有效,所以我想知道如何使用 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);

MailKit

如果您查看 SmtpClient.cs 参考源,在 Initialize() 方法中:

因此,要获得与 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端口。