gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:36:35 36 4
gpt4 key购买 nike

当我尝试使用 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 连接到主机时使用相同的主机和端口,我得到了异常(exception):
    var mailKitClient = new MailKit.Net.Smtp.SmtpClient();
    mailKitClient.Connect(host, port, enableSsl); // it throws the exception.

    最佳答案

    问题是您正在连接到纯文本端口并期待 SSL。
    在 MailKit 中,真/假 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);

    关于c# - MailKit:由于意外的数据包格式,握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68963416/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com