您的位置:首页 > 大数据 > 人工智能

解决.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 中找到了下面的代码:
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跨平台或扫描二维码关注

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: