使用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。