解决.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跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker – 你应该知道的10件事
- 下一篇: .NET Core全新路线图