首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MailKit:由于意外的数据包格式,握手失败

MailKit:由于意外的数据包格式,握手失败
EN

Stack Overflow用户
提问于 2021-08-28 10:22:55
回答 1查看 769关注 0票数 2

当我试图使用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不抛出异常?他们之间有什么区别?
  • 如何解决?

代码

初始化邮件发送所需的参数:

代码语言:javascript
复制
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发送邮件

代码语言:javascript
复制
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连接到主机时,我得到了异常:

代码语言:javascript
复制
var mailKitClient = new MailKit.Net.Smtp.SmtpClient();
mailKitClient.Connect(host, port, enableSsl); // it throws the exception.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-28 11:40:53

问题是,您正在连接到一个纯文本端口,并期待SSL。

在MailKit中,true/false useSsl参数用于决定是否以SSL模式或纯文本模式进行连接。

在System.Net.Mail中,它们不支持在SSL模式下进行连接,它们只支持在连接建立后使用STARTTLS命令将纯文本连接升级到SSL模式。

为了克服这一问题,MailKit有一个不同的Connect()方法,它接受枚举值SecureSocketOptions

你想要的是SecureSocketOptions.StartTls

代码语言:javascript
复制
var mailKitClient = new MailKit.Net.Smtp.SmtpClient();
mailKitClient.Connect(host, port, SecureSOcketOptions.StartTls);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68963416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档