当我试图使用MailKit SmtpClient连接到SMTP服务器时出现异常。,但,如果我使用具有相同参数的System.Net.Mail.SmtpClient,我的邮件已经发送成功!
异常消息:An error occurred while attempting to establish an SSL or TLS connection.
内部异常消息:The handshake failed due to an unexpected packet format.
问题
MailKit.Net.Smtp.SmtpClient抛出异常,而System.Net.Mail.SmtpClient不抛出异常?他们之间有什么区别?代码
初始化邮件发送所需的参数:
var host = "myhost.com";
var port = 2525;
var from = "from@mydomain.com";
var to = "to@mydomain.com";
var username = "from@mydomain.com";
var password = "myPassword";
var enableSsl = true;使用System.Net.Mail.SmtpClient发送邮件
var client = new System.Net.Mail.SmtpClient
{
Host = host,
Port = port,
EnableSsl = enableSsl,
Credentials = new NetworkCredential(username, password)
};
client.Send(from, to, "subject", "body"); // success.但是,当我试图用同一个主机和端口使用MailKit连接到主机时,我得到了异常:
var mailKitClient = new MailKit.Net.Smtp.SmtpClient();
mailKitClient.Connect(host, port, enableSsl); // it throws the exception.发布于 2021-08-28 11:40:53
问题是,您正在连接到一个纯文本端口,并期待SSL。
在MailKit中,true/false useSsl参数用于决定是否以SSL模式或纯文本模式进行连接。
在System.Net.Mail中,它们不支持在SSL模式下进行连接,它们只支持在连接建立后使用STARTTLS命令将纯文本连接升级到SSL模式。
为了克服这一问题,MailKit有一个不同的Connect()方法,它接受枚举值SecureSocketOptions。
你想要的是SecureSocketOptions.StartTls
var mailKitClient = new MailKit.Net.Smtp.SmtpClient();
mailKitClient.Connect(host, port, SecureSOcketOptions.StartTls);https://stackoverflow.com/questions/68963416
复制相似问题