解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
2016-07-18 08:13
866 查看
在博问中(.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 ,然后运行邮件发送程序,问题解决。
[更新]
MailKit 的作者已经修复了这个问题,详见 Added another broken SMTP server to the list
相关文章:
微软.NET 正式劈腿成功,横跨所有平台
.NET Core 1.0 CentOS7 尝试
解读发布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安装及示例教程
ASP.NET Core 开发-中间件(Middleware)
结合Jexus + Kestrel 部署 asp.net core 生产环境
通过Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文档 第一章 入门
用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
用 Visual Studio 发布一个 Azure 云 Web 应用程序
ASP.NET Core MVC 与 Visual Studio 入门
第二章指南(4.2)添加 Controller
DotNet Core 介绍
asp.net core 中间件详解及项目实战
教你实践ASP.NET Core Authorization(免看文档教程)
asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存
asp.net core 中间件详解及项目实战
第二章 指南(4.3)添加 View
dotnet core开发体验之开始MVC
dotnet core 开发体验之Routing
聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer
简析.NET Core 以及与 .NET Framework的关系
.NET Core 使用Dapper 操作MySQL
使用 CommandLineApplication 类创建专业的控制台程序
简析 .NET Core 构成体系
.NET Core也可以使用MongoDB了
.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布
.NET Core:面向未来的开源跨平台开发技术
微软说它深爱着Linux,现在它用行动证明了
移植.NET Core计划,整合各平台变得更简单了!
ASP.NET Core 介绍
通过几个Hello World感受.NET Core全新的开发体验
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
Asp.Net Core 发布和部署(Linux + Jexus )
学习ASP.NET Core,你必须了解无处不在的“依赖注入”
.NET Core应用类型(Portable apps & Self-contained apps)
.NET Core 1.0发布:微软开源跨平台大布局序幕
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
使用 dotnet watch 开发 ASP.NET Core 应用程序
ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
ASP.NET Core Docker部署
ASP.NET Core "完整发布,自带运行时" 到jexus
全球首发免费的MySql for Entity Framework Core
ASP.NET Core开发-使用Nancy框架
原文地址:http://www.cnblogs.com/dudu/p/5661267.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
于是,向阿里云提交了工单。。。在提供了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 ,然后运行邮件发送程序,问题解决。
[更新]
MailKit 的作者已经修复了这个问题,详见 Added another broken SMTP server to the list
相关文章:
微软.NET 正式劈腿成功,横跨所有平台
.NET Core 1.0 CentOS7 尝试
解读发布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安装及示例教程
ASP.NET Core 开发-中间件(Middleware)
结合Jexus + Kestrel 部署 asp.net core 生产环境
通过Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文档 第一章 入门
用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
用 Visual Studio 发布一个 Azure 云 Web 应用程序
ASP.NET Core MVC 与 Visual Studio 入门
第二章指南(4.2)添加 Controller
DotNet Core 介绍
asp.net core 中间件详解及项目实战
教你实践ASP.NET Core Authorization(免看文档教程)
asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存
asp.net core 中间件详解及项目实战
第二章 指南(4.3)添加 View
dotnet core开发体验之开始MVC
dotnet core 开发体验之Routing
聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer
简析.NET Core 以及与 .NET Framework的关系
.NET Core 使用Dapper 操作MySQL
使用 CommandLineApplication 类创建专业的控制台程序
简析 .NET Core 构成体系
.NET Core也可以使用MongoDB了
.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布
.NET Core:面向未来的开源跨平台开发技术
微软说它深爱着Linux,现在它用行动证明了
移植.NET Core计划,整合各平台变得更简单了!
ASP.NET Core 介绍
通过几个Hello World感受.NET Core全新的开发体验
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
Asp.Net Core 发布和部署(Linux + Jexus )
学习ASP.NET Core,你必须了解无处不在的“依赖注入”
.NET Core应用类型(Portable apps & Self-contained apps)
.NET Core 1.0发布:微软开源跨平台大布局序幕
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
使用 dotnet watch 开发 ASP.NET Core 应用程序
ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
ASP.NET Core Docker部署
ASP.NET Core "完整发布,自带运行时" 到jexus
全球首发免费的MySql for Entity Framework Core
ASP.NET Core开发-使用Nancy框架
原文地址:http://www.cnblogs.com/dudu/p/5661267.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
相关文章推荐
- HDU 1023 Train Problem II 卡特兰数 高精度
- aidl 进程间通信
- Ubuntu远程连接报错:xrdp_mm_process_login_response: login failed
- TurboMail邮件系统入驻第一重型机械集团
- Paint研究
- 微软笔试题-Constraint_Checker
- 微软笔试题-Constraint_Checker
- mac air/pro 启用三指拖动手势
- failed to lazily initialize a collection of
- sleep方法和wait方法的区别?
- Rejected because no crossdomain.xml policy file was found
- BNU Training 2016.07.12 总结
- 进程(2)—— wait()/waitpid()、vfork+exec
- UVA 253 Cube painting(未通过)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)
- 自动发送邮件工具-Auto Send Mail Tool (ASM)