解决.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 --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 ,然后运行邮件发送程序,问题解决。

时间: 2024-10-24 14:52:28

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

【初码干货】使用阿里云邮件推送服务架设自己邮件验证与推送体系

提示:阅读本文需提前了解的相关知识 1.电子邮件协议(http://baike.baidu.com/view/2367542.htm) 2.阿里云邮件推送(https://www.aliyun.com/product/directmail) 3.EDM(电子邮件营销)(http://baike.baidu.com/subview/1212416/8602812.htm) 4.SendCloud邮件服务(http://sendcloud.sohu.com/) 阅读目录结构 引: 一.需求分析 二.

阿里云邮件推送服务

提起邮件服务,最早之前一般自建邮件服务器,需要硬软件和运维的支持,稳定性也难保证,随着云服务的普及邮件推送功能的服务化是趋势,也省钱省事省心. 最早开始用过搜狐邮件服务,阿里云生态现在基本都出现了,我们来尝试一下阿里云的邮件推送服务: 一.阿里云控制台操作 首先在阿里云邮件推送控制台添加域名,然后在自己的dns服务器中添加如下的解析(根据控制台中的“配置”): 一个主机名为aliyundm的TXT记录,用于验证域名所有权 一个主机名为空.值为v=spf1 include:spf1.dm.aliy

Laravel 下结合阿里云邮件推送服务

参考1:https://github.com/rainwsy/aliyundm 参考2:https://github.com/HyanCat/aliyun-direct-mail, https://packagist.org/packages/hyancat/aliyun-direct-mail?q=&orderBys%5B0%5D%5Bsort%5D=favers&orderBys%5B0%5D%5Border%5D=asc, http://blog.jayxhj.com/2016/05

用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还是很耐心的. 最终结论,是由于MailKit发送了两次EHLO命令,查看了MailKit源码后竟然发现,里面写了硬编码: if (host != "smtp.strato.de" && host != "smtp.sina.com") Ehlo (can

阿里云邮件推送及邮件发送测试

工具:域名(推荐二级域名).阿里云企业邮箱,开通及解析过程下文有记录 一.邮件推送 在域名解析处解析一个二级域名,用作邮件域名,如mail.danny.com(danny.com是主域名) 进入邮件推送控制台 上图是解析验证通过之后的截图 点击配置会提示如何配置解析 在域名解析处按照上图要求配置解析,返回点击验证通过即可 二.阿里云企业邮箱 点击链接注册购买免费企业邮箱 进入控制台企业邮箱设置解析,记得重置密码(邮箱密码) 添加如下设置(注意:此文档针对的是主域名文档,二级域名除了邮箱解析 im

Android实战——第三方服务之Bmob后端云的推送服务的集成和使用(三)

第三方服务之Bmob后端云的推送服务的集成和使用(三) 事先说明:这里的一切操作都是在集成了BmobSDK之后实现的,如果对Bmob还不了解的话,请关注我第一篇Bmob文章 步骤一:推送服务的集成 在app的build.gradle中添加compile依赖文件: 在manifests文件中配置权限: 在manifests文件中添加需要的配置: 创建一个Receiver接受推送消息: 在Activity的onCreate方法中初始化BmobPush: 在Bmob后台管理中设置: 步骤二:推送服务的

阿里云的NoSQL存储服务OTS的应用分析

这篇文章主要介绍了阿里云的NoSQL存储服务OTS的应用分析,OTS作为阿里巴巴开发的NoSQL存储技术服务现已面向用户商业化,需要的朋友可以参考下. 1. 概要  OTS是构建在阿里云飞天分布式系统上的NoSQL存储服务,提供海量结构化数据的存储和实时访问.OTS以实例和表来组织数据,通过自动的数据分区和负载均衡技术,对应用提供规模(数据和访问)的无缝扩展.应用通过调用OTS API/SDK或者操作管理控制台来使用OTS服务.OTS服务具有以下几个主要的特点:  规模可扩展:OTS具备可扩展的

Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)

# 安装rinetd wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd sed -i 's/65536/65535/g' rinetd.c (修改端口范围) mkdir /usr/man&&make&&make install 说明:IP的端口是双字节,也就是256*256-1, 256*256对计算机来说就是0,因

使用阿里云的短信服务发送短信

在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样,之前用的一个厂商的,提供了一个封装类就很容易发送短息,因此都是基于HTTP协议做的一个数据发送而已,接触阿里云的短信服务器后,发现阿里云还增加了非常多的参数,其中包括一些秘钥和签名的内容.短信发送由于比较敏感原因,大多数应用场景是验证码或者一些固定的信息提醒,因此厂商都要求客户按预定的模板来发送,这样限制了短信的应用场景,只能根据业务进行消息定制了.本篇随笔主要介绍阿里云的短信服务