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



使用asp.net内核3.1我可以使用以下代码发送电子邮件:

使用System.Net.Mail.SmtpClient的代码片段1

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("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((方法中:

  • 如果端口==0
    • 如果有可用的MailConfiguration XML文件,它将使用XML中的指定端口(默认为端口25(:https://referencesource.microsoft.com/#System/net/System/Net/Configuration/SmtpNetworkElement.cs,e4c99455 ef3ea37c
    • 否则,如果没有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。

相关内容

  • 没有找到相关文章

最新更新