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

在博问中(.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 --recursivecd submodules\MimeKit\MimeKit
dotnet restorecd ..\..\..\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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM内存管理------垃圾搜集器参数精解

转载自 JVM内存管理------垃圾搜集器参数精解垃圾搜集器选择参数UseSerialGC:开启此参数使用serial & serial old搜集器(client模式默认值)。UseParNewGC:开启此参数使用ParNew & serial old搜集器(不推荐&a…

笑死了,打错一个字,竟然...

淘宝上,让人快活的打字错误: -有大妈吗?(大码) -亲,客服最大的27岁 -你能活到付款吗?(货到付款) -亲,我尽量 -你们有尸体店吗?(实…

c语言模拟题答案及解析,全国计算机等考二级C语言模拟试题,答案及解析一

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼(18)下列程序的输出结果是_________。Main(){ int i;for(i1;il;i){ if(i>4){printlf("%d",i);break;}}printf("&#xff05…

.NET Core全新路线图

.NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新的路线图https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/这个路线…

JVM内存管理------垃圾搜集器精解

转载自 JVM内存管理------垃圾搜集器精解引言在上一章我们已经探讨过hotspot上垃圾搜集器的实现,一共有六种实现六种组合。本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力如何。为了方便各位的观看与对比,LZ决定采用当初写设计模式时使用…

最新开发android版本,Android版本检测升级

我们应该都有类似的使用体验,当一款APP需要更新是,进入界面会提醒有新的更新是否更新,这里有那么几个步骤1、首先检测当前版本2、判断服务器中版本3、如果有更新则点击更新,下载安装包,下载完成后自动安装具体代码怎么…

每一个C#开发者必须知道的13件事情

1. 开发流程 程序的 Bug 与瑕疵往往出现于开发流程当中。只要对工具善加利用,就有助于在你发布程序之前便将问题发现,或避开这些问题。 标准化代码书写 标准化代码书写可以使代码更加易于维护,尤其是在代码由多个开发者或团队进行开发与维护时…

利用命令来打开所有程序,这个装逼给满分!

如何利用命令来实现打开程序?这样我们还可以让桌面一个图标不留!首先我们在桌面新建一个文件夹,然后以配音命名,这个时候我们将桌面上的图标拖进这个文件夹。 然后将我们的图标名称修改成好记的名称,比如:…

JVM内存管理------GC算法精解(复制算法与标记/整理算法)

转载自 JVM内存管理------GC算法精解(复制算法与标记/整理算法)本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法。上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种…

android url回调json,【求助】本地页面如何取某个URL返回的json

[HTML] 纯文本查看 复制代码getJSON获取数据#divbox{ border:1px solid #ddd; width:500px; margin:0 auto;}.load{ background:#eee; height:30px;}$(function () {//点击按钮获取数据$("#btn").click(function () {$.ajax({//json链接url:"https://h5.jinjied…

ASP.NET Core 十种方式扩展你的 Views

原文地址:http://asp.net-hacker.rocks/2016/02/18/extending-razor-views.html作者:Jrgen Gutsch翻译:杨晓东(Savorboard) 现在,已经有很多种方式来扩展Razor视图了,我们循循渐进,先从最简单的开始。如果你…

JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

转载自 JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧。不过LZ丑话说前面哦,这篇文章应该能让…

鸿蒙 电视 安卓,华为鸿蒙2.0来了!打通手机、电视、PC全平台,Mate 40 整装齐发...

华为鸿蒙2.0来了!打通手机、电视、PC全平台,Mate 40 整装齐发2020-07-05 15:52:041点赞0收藏1评论7月5日消息,据国外知名爆料玩家 Teme 透露,华为今年秋季发布会上除了将发布华为 Mate 40 系列旗舰机型外,还将带来 EMU…

跳槽穷半年,改行穷三年,说的太好了!

跳槽穷半年,改行穷三年。献给每天喊辞职、想辞职的人或周期性喊辞职、想辞职的人! 1 不要轻易离开团队,否则你要从零做起 。2 不要老想着做不顺就放弃,哪个团队都有问题,哪个团队都有优点。3 .跟对领导很重要&#xff…

JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

转载自 JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)引言何为终极算法?其实就是现在的JVM采用的算法,并非真正的终极。说不定若干年以后,还会有新的终极算法,而且几乎是一定会有&…

android 应用程序 判断 ,如何判断Android应用程序是否正在前台运行?

慕的地6264312或者,您可以检查ActivityManager哪些任务正在按getRunningTasks方法运行。然后,检查返回的任务列表中的第一个任务(前景中的任务)是否是您的任务。这是代码示例:public Notification buildNotification(String arg0, Map arg1) …

在离线环境中使用.NET Core

0x00 写在开始 很早开始就对.NET Core比较关注,一改微软之前给人的印象,变得轻量、开源、跨平台。最近打算试着在工作中使用。但工作是在与互联网完全隔离的网络中进行的,因此就开始了在离线环境中部署.NET Core开发环境的尝试。总的来说还是…

java常量池技术

转载自 java常量池技术摘要: 简介 常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s "java"这种…

华为荣耀5a是android几,华为荣耀5a各版本区别 华为荣耀5a各版本 对比【图文】

一个多月前,华为发布了华为荣耀5a,相信不少人都对这部手机十分期待。这款产品主打Slogan是“青春好拍档”。延续了5系列的定位,不仅价格便宜还拥有不错的拍照及音质调教。那么华为荣耀畅玩5A有几个版本?各版本有什么区别?下面小编就带来华为…

.NET程序员走向高端必读书单汇总

如今程序开发工作越来越简单(丰富的API、智能的IDE、越来越多的开发框架),普通人通过简单的训练,通过组合和复制就能完成众多程序的功能。因此程序员这种过去高技术职业的代名词,现在却如此低贱,被称之为码农。借用微观经济学原理…