• 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题


    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题。

    于是,向阿里云提交了工单。。。在提供了TCP抓包数据后,阿里云技术专员发现了问题所在:在认证通过后,MailKit发送了EHLO命令,然后才发送MAIL FROM命令,服务器在收到EHLO时会重置客户端的认证状态,所以后续的命令过来时,服务器认为客户端没有认证,于是报错“503 Bad sequence of commands”。

    知道了问题的原因后,首先想到的解决方法是不让MailKit在发送MAIL FROM命令之前发送EHLO命令。

    于是在github上签出MailKit的源代码,在 MailKitNetSmtpSmtpClient.cs 中找到了下面的代码:

    if (host != "smtp.strato.de" && host != "smtp.sina.com")
        Ehlo (cancellationToken);

    并且发现了对应这个问题的issue:EHLO after AUTH causes send failure with 5.7.0 even though authentication succeeded #162

    原来这是已知问题,MailKit暂时采用了临时解决方法,于是我们也依葫芦画瓢,加上了阿里云邮件推送服务的SMTP服务器:

    if (host != "smtp.strato.de" && host != "smtp.sina.com"
        && !host.Equals("smtp.dm.aliyun.com", StringComparison.OrdinalIgnoreCase))
        Ehlo (cancellationToken);

    接着通过以下命令自己编译出MailKit.dll(在 MailKitinDebug etstandard1.3 文件夹中)

    git submodule update --init --recursive
    
    cd submodulesMimeKitMimeKit
    dotnet restore
    
    cd ......MailKit
    dotnet restore
    dotnet build

    接着用这个 MailKit.dll 替换 .nugetpackagesMailKit1.4.0lib etstandard1.3MailKit.dll ,然后运行邮件发送程序,问题解决。

    [更新1]

    MailKit 的作者已经修复了这个问题,详见 Added another broken SMTP server to the list

    [更新2]

    MailKit 1.4.1 已修复这个问题。

  • 相关阅读:
    0302 随想
    1231递归下降语法分析程序设计
    《构建之法》1、2、3章读后感
    复利计算总结
    操作系统实验0
    学习进度条
    0302思考并回答一些问题
    评论
    c语言文法
    词法分析
  • 原文地址:https://www.cnblogs.com/dudu/p/5661267.html
Copyright © 2020-2023  润新知