Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Gmail响应RCPT的“无效RFC 5321地址”错误,而不是邮件动词

Gmail响应RCPT的“无效RFC 5321地址”错误,而不是邮件动词
EN

Stack Overflow用户
提问于 2016-09-15 04:25:43
回答 1查看 23.2K关注 0票数 1

在为我们的应用程序编写MSA (各种类型)的上下文中,我目前正在编写一些代码,以测试是否可以连接到给定的地址发送邮件,包括是否需要身份验证。

为了对后者进行测试,我假装从(虚构的)地址发送了一封电子邮件,地址与收件人使用的地址相同。

我使用这种方法,尽管我不想这样做,因为我需要能够同时向服务器发送一个MAIL谓词和一个RCPT谓词。据我所知,原因是在寄出邮件之前没有动词(如EHLO,STARTTLS,AUTH等)。如果缺少身份验证,将导致错误。有些服务器,如Gmail,在发送未经授权的邮件时会出现错误,但其他服务器只在我尝试添加收件人时才会做出反应,因此需要这两个动词。

我之所以在虚构的邮件中使用IP地址而不是域名,是因为当时我不一定能够访问域名。我知道这不漂亮,但这是合法的。只要IP地址是根据RFC 5321指定的。

有趣的是,Gmail将使用虚构的邮件地址接受MAIL谓词,但是当收件人抱怨它不是有效的RFC 5321地址时,会抛出一个553错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SEND: "MAIL FROM:<test@[IPv6:fe80::105e:c040:c56c:b8bc]>"
RECV: "250 2.1.0 OK s82sm4688131lja.26 - gsmtp"
SEND: "RCPT TO:<test@[IPv6:fe80::105e:c040:c56c:b8bc]>"
RECV: "553-5.1.2 The recipient address <test@[ipv6:fe80::105e:c040:c56c:b8bc]> is not a"
      "553 5.1.2 valid RFC-5321 address. s82sm4688131lja.26 - gsmtp"

我应该注意,我已经尝试过这一点,无论是使用还是不使用IPv6前缀。如果没有它,在Postfix上运行的另一个SMTP服务器会出现故障。基于后缀的服务器恰好是那些在未经身份验证的情况下发送邮件谓词时没有抛出错误的服务器之一。

顺便说一下,Gmail的这个问题并不局限于IPv6地址。切换到IPv4地址会产生相同的结果。这一问题似乎也与当地地址无关。邮件动词被接受,RCPT动词失败。

据我所知,我提供的是一个合适的RFC 5321兼容地址。到底怎么回事?我哪里出问题了?乍一看,这个问题似乎与GMail/GSMTP有关。

EN

回答 1

Stack Overflow用户

发布于 2016-09-15 04:36:16

是的,Gmail/SMTP的“问题”是一个松散的词;“问题”是指他们拒绝接受发送给address-literal的电子邮件,如RFC 5321所述。

尽管RFC 5321允许RCPT TO中的地址文字,但是Gmail显然选择不支持它,不管他们使用什么原因。我相信Gmail并不是世界上唯一一个出于某种原因不支持SMTP协议中某些神秘部分的邮件提供商。

差不多就是这样了。这里的答案是,“事情就是这样”。您要发送的命令符合RFC 5321。Gmail拒绝它。结束了。

如果你想对此发牢骚,RFC 5321第3.3节也指出:

同样,服务器可能拒绝接受发送给其他主机或系统的邮件。

因此,从技术上讲,Gmail的邮件服务器不需要为Gmail以外的任何人接受邮件。就是这样。

你的选择是:

  1. 不要使用地址文字。
  2. 使用另一个支持指定为地址文本的目标地址的邮件服务器提供程序。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39510992

复制
相关文章
JS 函数中的 arguments 类数组对象
众所周知,js 是一门非常灵活的语言。当我们在 js 中调用一个函数时,经常会给函数传递一些参数,js 把调用函数时传入的全部实参存储到一个叫做 arguments 的类数组对象里面
很酷的站长
2022/12/04
5.5K0
JS 函数中的 arguments 类数组对象
js中的对象
面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。
用户4940950
2019/03/26
7K0
JS中对象+构造函数+原型对象谈恋爱了嘛。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> function Person(myName,myAge) { this.name=myName; this.age=myAge; this.currentType="构造函数中的属性"; this.say=function() { console.log("构造函数里面的方法");
贵哥的编程之路
2020/10/28
1.2K0
JS中对象+构造函数+原型对象谈恋爱了嘛。
JS-比较函数中嵌套函数,可以排序【对象数组】
1 function createCompareFun(propertyName){ 2 return function(object1,object2){ 3 var value1 = object1[propertyName]; 4 var value2 = object2[propertyName]; 5 if(value1>value2){
xing.org1^
2018/05/17
4.9K0
js中对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>03_对象</title> </head> <body> <!-- 1. 什么是
李才哥
2020/03/28
9K0
js中的函数
console.log(fn instanceof Object) // 是Object类型的实例
李才哥
2020/08/17
6.5K0
js中的函数
js中的函数
console.log(fn instanceof Object) // 是Object类型的实例
李才哥
2020/03/28
5.3K0
js中的函数
js---对象 和 函数this
   当函数被保存为一个对象的属性时,它就可称为这个对象的方法。当一个方法被调用时,this被绑定到这个对象上。如果调用表达式包含一个提取属性的动作(. 或 []),那么它被称为方法调用。例如:
小蔚
2019/09/11
1.3K0
直接写和放在函数中不同的R语言用法
df$A可以索引数据框df中列名为A的列的所有值。那么假如列名是一个R对象怎么做?
生信宝典
2022/01/19
1.9K0
JavaScript中的函数、对象
JS中的函数 声明方式 方式一 function 函数名(){ 函数体 } 方式二 var 函数名=function(){ 函数体 } 方式三 var 函数名=new
时间静止不是简史
2020/07/24
2.7K0
JavaScript中的函数、对象
Js中Symbol对象
ES6引入了一种新的基本数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名,Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法,其静态属性会暴露几个内建的成员对象,它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法new Symbol()。每个从Symbol()返回的symbol值都是唯一的,一个symbol值能作为对象属性的标识符。
WindRunnerMax
2020/10/26
5.1K0
Js中String对象
创建一个字符串可以通过字面量的方式,通过字面量创建的字符串变量在调用方法的时候能够自动转化为临时的包装对象,从而能够调用其构造函数的原型中的方法,也可以利用String对象生成字符串对象,此外在ES6标准还定义了模板字面量用以生成字符串的方式。
WindRunnerMax
2020/09/18
7.7K0
Js中Proxy对象
Proxy对象用于定义基本操作的自定义行为,例如属性查找、赋值、枚举、函数调用等。
WindRunnerMax
2020/11/24
2.6K0
JS中Arguments对象
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。例如,如果一个函数传递了三个参数,你可以以如下方式引用他们:
Caleb
2020/11/03
2.2K0
Js中Reflect对象
Reflect是ES6起JavaScript内置的对象,提供拦截JavaScript操作的方法,这些方法与Proxy对象的handlers中的方法基本相同。
WindRunnerMax
2020/11/26
3.7K0
小程序的登录逻辑能否放在app.js中实现?
前言:做小程序开发的同学,可能都会考虑一个问题,用户登录这个方法是公用的,我们应该把这个方法放在哪里最合适呢? 看到上面的问题后,很大一部分刚入门同学都会直接把登录方法放在app.js里,并且有些同
连胜
2018/03/22
3.6K0
小程序的登录逻辑能否放在app.js中实现?
Js中Date对象
JavaScript的Date对象是用于处理日期和时间的全局对象,Date对象基于Unix Time Stamp,即自1970年1月1日UTC起经过的毫秒数。
WindRunnerMax
2020/10/26
21.4K0
Js中Math对象
Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math用于Number类型,其不支持BigInt。
WindRunnerMax
2020/10/10
5.2K0
Js中Array对象
JavaScript的Array对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。
WindRunnerMax
2020/10/26
9.9K0
Js中Number对象
JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript的Number类型为双精度IEEE 754 64位浮点类型。
WindRunnerMax
2020/10/10
3.4K0

相似问题

将对象放在键列表中。纯JS

211

如何将对象放在js中的HashMap中?

30

不应将JS函数声明放在块中。

11

自动释放在函数调用中创建的对象

34

将函数放在对象中的最好方法?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文