解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
2016-07-11 19:27
627 查看
在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题。
于是,向阿里云提交了工单。。。在提供了TCP抓包数据后,阿里云技术专员发现了问题所在:在认证通过后,MailKit发送了EHLO命令,然后才发送MAIL FROM命令,服务器在收到EHLO时会重置客户端的认证状态,所以后续的命令过来时,服务器认为客户端没有认证,于是报错“503 Bad sequence of commands”。
知道了问题的原因后,首先想到的解决方法是不让MailKit在发送MAIL FROM命令之前发送EHLO命令。
于是在github上签出MailKit的源代码,在 MailKit\Net\Smtp\SmtpClient.cs 中找到了下面的代码:
并且发现了对应这个问题的issue:EHLO after AUTH causes send failure with 5.7.0 even though authentication succeeded #162
原来这是已知问题,MailKit暂时采用了临时解决方法,于是我们也依葫芦画瓢,加上了阿里云邮件推送服务的SMTP服务器:
接着通过以下命令自己编译出MailKit.dll(在 MailKit\bin\Debug\netstandard1.3 文件夹中)
接着用这个 MailKit.dll 替换 .nuget\packages\MailKit\1.4.0\lib\netstandard1.3\MailKit.dll ,然后运行邮件发送程序,问题解决。
[更新1]
MailKit 的作者已经修复了这个问题,详见 Added another broken SMTP server to the list
[更新2]
MailKit 1.4.1 已修复这个问题。
于是,向阿里云提交了工单。。。在提供了TCP抓包数据后,阿里云技术专员发现了问题所在:在认证通过后,MailKit发送了EHLO命令,然后才发送MAIL FROM命令,服务器在收到EHLO时会重置客户端的认证状态,所以后续的命令过来时,服务器认为客户端没有认证,于是报错“503 Bad sequence of commands”。
知道了问题的原因后,首先想到的解决方法是不让MailKit在发送MAIL FROM命令之前发送EHLO命令。
于是在github上签出MailKit的源代码,在 MailKit\Net\Smtp\SmtpClient.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(在 MailKit\bin\Debug\netstandard1.3 文件夹中)
git submodule update --init --recursive cd submodules\MimeKit\MimeKit dotnet restore cd ..\..\..\MailKit dotnet restore dotnet build
接着用这个 MailKit.dll 替换 .nuget\packages\MailKit\1.4.0\lib\netstandard1.3\MailKit.dll ,然后运行邮件发送程序,问题解决。
[更新1]
MailKit 的作者已经修复了这个问题,详见 Added another broken SMTP server to the list
[更新2]
MailKit 1.4.1 已修复这个问题。
相关文章推荐
- http://blog.csdn.net/isadream/article/details/5746399
- [Cloud Computing]Mechanisms: Domain Name Service
- UVA 12338 Anti-Rhyme Pairs (字符串哈希+二分)
- 正向渲染路径细节 Forward Rendering Path Details
- git: fatal unable to auto-detect email address
- raid0,1,3,5,6,10,50的物理磁盘容量和逻辑容量的关系。
- Cannot retrieve metalink for repository: epel. Please verify its path and try again
- 关于NSString赋值retainCount等于-1
- CCS编译器报错: error #10234-D: unresolved symbols remain
- 易语言免杀360QVM人工智能
- drop、delete、truncate、alter表时show processlist出现Waiting for table metadata lock状态
- Cloudera Error: "Failed to handle Heartbeat Response"
- CodeForces 690C2 Brain Network (medium)(树上DP)
- kail install chinese
- DataType.EmailAddress的ErrorMessage设置中文后,在页面依然显示英文的问题
- vmware esxi 升级 SCSI RAID卡驱动
- CodeForces 690C1 Brain Network (easy) (水题,判断树)
- Contains Duplicate II
- clang -rewrite-objc (转自http://blog.tingyun.com/web/article/detail/845)
- thunderbird 导入源thunderbird的mail