问题标签 [rfc2822]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
674 浏览

php - RFC2822 不合规性,关于 PHP 标头中的 Date 或 From 的内容?

我正在尝试将表单提交到电子邮件,最终以 gmail 地址结束。但是,我收到返回错误说:

Our_system_has_detected_that_this_message_is/550-5.7.1_not_RFC_2822_compliant._To_reduce_the_amount_of_spam_sent_to_Gmail,/550-5.7.1_this_message_has_been_blocked._Please_review/550_5.7.1_RFC_2822_specifications_for_more_information。w10si875474obo.147 -_gsmtp/

下面的代码,我做错了什么还是我在某处遗漏了错误的代码/语法?:

0 投票
1 回答
564 浏览

zend-mail - DKIM 标头规范化是否在 To: 标头中的每个逗号后插入一个空格?

使用 Zend 框架 1.12、PHP 5.3.1。为 Zend_Mail 指定多个邮件收件人并使用 Smtp 传输,“To:”标头包含以逗号分隔的收件人列表。例如

To: a@example.com,b@example.com

根据RFC 2822,这似乎是正确的语法。我添加了 DKIM 签名(使用https://github.com/louisameline/php-mail-signature),它可以正常工作,生成 gmail 和其他验证者接受的传递签名,只有一个 To: 收件人。但是对于多个recipents,签名失败。

发送签名邮件check-auth@verifier.port25.com将电子邮件返回到 Return-path,其中包含各种检查的结果,其中包含它计算的标头和正文的规范化版本。我看到它在规范化 To: 标头时在每个逗号后添加了一个空格(我正在为标头和正文指定宽松的规范化)。事实上,我在规范化 To: 标头时破解了我的签名生成以添加该空间,这解决了问题:port25.com 验证程序、gmail 和其他人现在通过了签名。

但是在我看到的关于 DKIM 宽松规范化的任何描述中,包括对RFC 6376的第 3.4 节的非常仔细的阅读,以及我从上面引用的 github 下载的签名类中的代码,都没有添加任何空白的地方存在于原件中;指定的规范化都是关于更改现有空格的。

所以在我看来,由 port25 验证器完成的规范化与 RFC 6376 不一致——除了 gmail、autorespond+dkim-relaxed@dk.elandsys.com 和http://www.appmaildev 等其他 DKIM 验证器。 com/en/dkim/都同意最终结果(他们没有像 port25 那样显示他们执行的规范化,但如果我不规范化逗号后的空格,他们会拒绝签名)。

这里有人对此有任何见解吗?由于该领域的实践似乎与 2011 年的 RFC 一致,难道不应该更新 RFC 吗?当然还有一个问题,在 WSP 被单个空格替换之前,是否应该将 To: 标头值中的所有逗号规范化为逗号空间,以及是否影响任何其他标头。

最终决议摘要

关于 OP,Evan 的回答完全正确:我的 MTA 是在添加空间,而不是验证器的规范化。我只是没有仔细查看实际收到的 To: 标头。

但是知道这一点并不能完全解决生成正确签名的问题。“根本”问题是 Zend_Mail 使用逗号在标题中生成地址列表值,而没有后面的空格作为分隔符 - 尽管它是完全有效的语法,但对于 MTA 来说,在每个之后引入一个空格也是完全有效的。RFC 6376 指定并广泛实施的宽松规范化不适应这种 MTA 重写。将 Zend_Mail 代码更改为使用逗号空格作为分隔符将是微不足道的,除了它是在一个相当长且复杂的方法中间完成的,该方法将涉及主要的复制粘贴来覆盖,这感觉是错误的。所以我最终做的是编写一个预过滤器,在签名之前将空格放在标题中。

0 投票
1 回答
4206 浏览

smtp - 标题中显示名称的验证/格式

我需要知道name-addr电子邮件中来自()字段的验证/格式规则是什么。在 rfc 中解释name-addrdisplay-name.

像这样:

我想知道允许的字符和长度。我怎么知道John Q. Public有有效的字符?我应该只允许可打印的 US-ASCII 字符吗?

我查阅了RFC 2822并没有找到关于显示名称的具体格式

0 投票
3 回答
3443 浏览

python - 如何将消息发送给多个收件人?

我在使用 Gmail API 向多个地址发送邮件时遇到了一些问题。我只成功地向一个地址发送了一条消息,但是当我在'To'字段中包含多个以逗号分隔的地址时出现以下错误:

发生错误:<HttpError 400 when requesting
https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json 返回“Invalid to header”>

我正在使用此 Gmail API 指南 中的CreateMessage和方法: https ://developers.google.com/gmail/api/guides/sendingSendMessage

该指南指出,Gmail API 要求邮件符合 RFC-2822。在 RFC-2822 指南中使用其中一些寻址示例,我再次运气不佳: https ://www.rfc-editor.org/rfc/rfc2822#appendix-A

我的印象是 'mary@x.test, jdoe@example.org, one@y.test' 应该是传递给 'to' 参数的有效字符串CreateMessage,但我收到的错误SendMessage引导我否则相信。

请让我知道您是否可以重新创建此问题,或者您对我可能在哪里犯错有任何建议。谢谢!

编辑:这是产生错误的实际代码......

0 投票
2 回答
2142 浏览

python - 将字符串转换为日期时间对象

我试图将字符串转换为日期时间对象。我从新闻提要中获得的字符串格式如下:“Thu, 16 Oct 2014 01:16:17 EDT”

我尝试使用 datetime.strptime() 来转换它。IE,

并得到以下错误:

回溯(最后一次调用):
  文件“”,第 1 行,在 datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M: %S %Z')
  文件“C:\Anaconda\lib_strptime.py”,第 325 行,在 _strptime(data_string,格式)中)
ValueError:时间数据'Thu,2014 年 10 月 16 日 01:16:17 EDT' 与格式不匹配'%a, %d %b %Y %H:%M:%S %Z'

但是,如果我尝试了没有“EDT”的字符串,它就起作用了。IE,

有谁知道如何解析那个“EDT”部分?

0 投票
3 回答
1614 浏览

python - 在python中比较日期和当前日期

如何比较这种格式的日期时间对象

“星期四,2015 年 1 月 15 日 06:35:37 GMT”与当前时间?

0 投票
1 回答
551 浏览

node.js - 生成简短但全局唯一的 Message-Id

我已经构建了一个生成一个非常独特的模块Message-Id,但我被要求缩短它,所以我想知道我能把它做多短,所以它仍然是 RFC 2822 有效的并且不会被垃圾邮件过滤器捕获。

我看到 Python生成了一个大约 41 个字符长的字符,这似乎有点太短了。

有什么建议么?

0 投票
1 回答
789 浏览

javascript - Manipulate RFC 2822 email in javascript

I am creating a chrome extension which works with the gmail api. The email format followed is based on RFC 2822. I want to modify the email. Is there any standard library in javascript to manipulate the RFC 2822 compliant email?

0 投票
2 回答
2581 浏览

email - 为什么 Gmail 拒绝我们的电子邮件,因为它不符合 RFC 2822?

我们使用Mailgun发送电子邮件,最近我注意到每天有不少电子邮件被 Gmail 拒绝。

这是我们收到的消息类型:

RFC 2822规范是一个庞大的文档,所以我没有从头到尾阅读它,但是通过查看网络上的资源,我们的电子邮件不会落入任何会触发 Gmail 此类响应的常见陷阱。

这是一个示例电子邮件标题:

我们做错了什么?

0 投票
1 回答
580 浏览

email - 电子邮件实施中的密件抄送字段

最近我们正在创建一个解释电子邮件内容的应用程序,这个应用程序将给我们TO地址,CC地址和BCC地址。

在处理 BCC 字段时,我们发现它似乎无法直接获取 BCC 地址。参考RFC2822,出现了更多问题。

假设按照以下地址发送电子邮件

我的问题是,当收件人 bcc1@address.com 收到其电子邮件时,电子邮件源文件中是否会有“bcc1@address.com”?如果是,那么它放在什么字段?如果没有,那么当没有关于“bcc1@address.com”的任何信息时,这封电子邮件怎么可能发送给收件人

[更新]
如果电子邮件中不包含密件抄送收件人电子邮件地址的信息(包括标头部分),电子邮件服务器如何知道将这封电子邮件发送到谁的邮箱?服务器如何正确转发此类电子邮件?