问题标签 [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.
unicode - 电子邮件标头:FROM 标头中允许/不允许的字符:(显示)名称
我正在尝试找到有关 FROM 标头(显示)名称中允许(或不允许)哪些字符的问题的答案。
我说的是引用中的“我的显示名称”。
我查看了tools.ietf.org/html/rfc822和tools.ietf.org/html/rfc2822但似乎找不到任何指定这些要求的内容。也许是因为它接受所有 unicode/UTF-8 字符,但它也没有说明这一点。
任何帮助或对某些文档的参考将不胜感激。
php - 检测到无效的标头值:imap 邮件接收标头具有 utf-8 法语口音
我正在使用 Zend Framework 2.4.13 开发一个项目,我必须从 imap 邮箱中检索邮件。为此,我使用\Zend\Mail\Storage\Imap
:
它运行良好,除了无法解析的特定邮件。标From
头无效,因为它包含原始 UTF-8 字符(法语口音):
然后我得到以下 Zend 错误:
我猜这些问题是关于 RFC 的。根据 RFC-2822 ,由于 UTF-8 字符,此标头无效,并且 Zend在标头被验证时抱怨它 。
我在网上看到了很多与此相关的问题,但其中大多数都在谈论电子邮件创建,而不是接收。
我还看到了有关国际化电子邮件标头的RFC-6532,但邮件似乎不遵守此标准(没有message/global
部分)。
实际解决方法
目前我发现的唯一解决方案是使用barbushin/php-imap,它是原生 php imap 函数的包装器。这个包似乎更宽容/更新,并正确检索邮件。
问题
我需要找到一种解决方案来使邮件接收过程更加宽容,以便接受这样的邮件标头。但是我不相信我的解决方法,它为已经在框架中实现的东西添加了供应商依赖项。
是否可以通过 ZF2 框架直接解决此问题?
php - Laravel - Swift_RfcComplianceException 仅在登台服务器 .env 文件问题上
我的暂存环境有问题,而我的本地环境中没有出现问题。
它给了我以下错误;
似乎该应用程序无法从我的 .env 文件中获取 mail_from_address 。为什么会发生这种情况,因为在我的本地环境中一切正常?
我的部署脚本中也有这些,
我在这里想念什么?有什么建议吗?问题是别的吗?
编辑2:我实际上将我的发件人地址硬编码如下,一切正常......所以问题是应用程序为什么不读取.env文件?这是某种类型的缓存问题吗?
编辑 1:我的 .env 文件中的“MAIL_FROM_ADDRESS”exixts。
编辑 3:解决方案
我在部署脚本中将 config:cache 移到了 config:clear 之前,并且应用程序能够从 .env 文件中获取电子邮件地址。
date - 为什么我的 RFC 2822 日期没有被 chrono 解析?
我正在编写一些代码来解析 RSS 提要,但我遇到了Abstruse Goose RSS 提要的问题。如果您查看该提要,日期编码为Mon, 06 Aug 2018 00:00:00 UTC
. 对我来说,它看起来像 RFC 2822。
我尝试使用 chrono's 解析它DateTime::parse_from_rfc2822
,但我得到了ParseError(NotEnough)
.
有什么我做错了吗?我必须以某种方式破解它吗?
我使用rfc822_sanitizer,它可以很好地修复错误的书写错误(大部分时间)。我不认为它会影响解析......但谁知道呢?
java - 如何正确解析收到的电子邮件标头?
解析接收到的 .eml 文件的标头以提取所有跃点信息的正确方法是什么?特别是我需要提取以下信息:
- 发件人网址
- 发件人 IP
- 收件人网址
- 接收器 IP
- 日期
- 协议
我找到了以下规范,但似乎没有接收到的标头格式的标准约定,并且可能因服务器而异:
对我来说,最清楚的解释是RFC 822 规范中的解释:
考虑以下received
标题
变化最大的领域似乎是
主机域
例如
- 来自 VE1PR01MB5599.eurprd01.prod.exchangelabs.com (2603:10a6:7:7c::43)
- 通过 HE1PR0102MB2714.eurprd01.prod.exchangelabs.com
- 来自 VI1PR0102CA0029.eurprd01.prod.exchangelabs.com (2603:10a6:802::42)
- 通过 VE1PR01MB5599.eurprd01.prod.exchangelabs.com (2603:10a6:803:11f::30)
- 来自 DB5EUR01FT034.eop-EUR01.prod.protection.outlook.com (2a01:111:f400:7e02::203)
- 通过 VI1PR0102CA0029.outlook.office365.com (2603:10a6:802::42)
- 来自 relay-out.ohc.cu (200.55.138.44)
- 通过 DB5EUR01FT034.mail.protection.outlook.com (10.152.4.246)
- 来自 relay-in.ohc.cu (relay-in.ohc.cu [127.0.0.1])
- 通过 relay-out.ohc.cu(后缀)
- 来自 relay-out.ohc.cu ([127.0.0.1])
- 通过 relay-in.ohc.cu (relay-in.ohc.cu [127.0.0.1]) (amavisd-new, 端口 10024)
- 来自 correo.patrimonio.ohc.cu(未知 [192.168.229.20])
- 通过 relay-out.ohc.cu(后缀)
- 来自本地主机(localhost.localdomain [127.0.0.1])
- 作者:correo.patrimonio.ohc.cu(后缀)
- 来自 correo.patrimonio.ohc.cu ([127.0.0.1])
- 通过本地主机(correo.patrimonio.ohc.cu [127.0.0.1])(amavisd-new,端口 10024)
- 来自 correoweb.patrimonio.ohc.cu(未知 [192.168.229.23])
- 作者:correo.patrimonio.ohc.cu(后缀)
邮件协议 ,例如
- 使用 Microsoft SMTP 服务器(版本=TLS1_2,密码=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)
- 使用 ESMTP
考虑到它们不断变化的性质,提取此类信息的综合方法是什么?SO 上的其他答案不鼓励在此任务中使用正则表达式,但是如何进行这种解析呢?如果存在一些经过测试的正则表达式或 Java 代码/库来解析接收到的标头以提取上述信息,那对我来说没问题。
node.js - 在 Node JS 中使用 gmail API 的“来自”字段的问题
我在 RFC2822 邮件的“发件人”字段中设置邮件作者时遇到问题(此处为详细信息)。问题是作者没有出现在收到的邮件中。我设置的“来自”字段如下所示:
但我也试过:
这些都不起作用,在收到的邮件中,查看原始邮件时仍然缺少名称。
这应该可以工作,因为使用 nodemailer(与 Gmail)和“来自”的相同值可以工作。有人可以解释一下发生了什么吗?我该如何解决?
编辑:我按照一条评论的要求报告了我正在使用的代码。
我将对 API 的调用与生成邮件正文的部分分开,因此调用是:
}
虽然以这种方式生成参数“mail”:
}
Mail 只是组成一个对象,该对象具有其第一个参数中给出的属性,而 b64enc() 将所有内容放入一个符合 RFC2822 的字符串中并将其编码为 base64。
EDIT2:邮件类的代码。
}
EDIT3:我添加了所需和实际行为的屏幕截图:
当然,我的电子邮件客户端中显示的内容是基于纯电子邮件中“发件人:”的内容。在第一种情况下它是“我的名字 <电子邮件地址>”,在第二种情况下它只是“电子邮件地址”。
php - PHP 邮件脚本在 IONOS Server 上不起作用
PHP-beginner 在这里尝试解决一个问题已经好几天了:
我正在尝试通过 IONOS 邮件服务器使用 PHP mail() 函数发送 html 邮件。Html 很重要,因为我想在标题(特殊字符)中设置电子邮件的编码。
不知何故,我在其他提供商的服务器上成功使用的脚本在 IONOS 服务器上不起作用。根据 IONOS 支持,电子邮件不遵循 RFC5321 和 RFC5322 标准。
我被告知要更改我的脚本,并且需要以下字段类型作为标题的一部分:“日期:”、“发件人:”、“发件人:”和“收件人:”,这些字段类型不得包括不止一次:“日期:”、“发件人:”、“发件人:”、“收件人:”、“抄送:”、“密件抄送:”、“主题:”。此外,字段类型“日期:”必须有效并遵循 RFC2822 标准。
这是我想出的:
此处缺少的变量已在前面定义。
不幸的是,这也不会通过 IONOS 邮件服务器发送邮件。
谁能指出我在哪里犯了错误?非常感谢您!
sql - RFC2822 日期时间格式到 SQL 服务器中可用的日期时间
我收到以下格式的日期时间:
如果我在 RFC2822 中更正了这一点。
我想不出将其转换为 SQl 服务器将使用的“正常”日期时间的方法。例如,我希望它是:
我尝试过 CONVERT() 之类的方法,并通过以下方式找到了一种粗略的方法:
但没有一个工作得那么好。有没有办法以“正确”的方式转换它?
编辑:
澄清:格式应始终与提供的示例相同。包括日期名称。
我不确定它是否总是相同的时区。我可能会从不同的时区收到它。这是需要考虑的事情。
escaping - RFC 2822 消息格式
我需要用 C++ 编写一些东西来发送符合 RFC-2822 标准的电子邮件。
但我不太确定的一件事是引用的字符串及其转义机制。官方文档让我很困惑。
https://datatracker.ietf.org/doc/html/rfc2822#section-3.2.4 https://datatracker.ietf.org/doc/html/rfc2822#section-3.2.5
特别是以下概念/问题:
什么是原子?
看起来下面4行是OR条件,%dxx是ASCII码和“;”后面的字 是解释/备注。如果是这种情况,则 %d33 + %d35-91 + %d93-126 已经定义了引用字符串中允许的字符范围而无需转义。为什么我们仍然需要第一行“NO-WS-CTL / ; Non white space controls”?另外,对于第二行,“%d33 / ; US-ASCII 的其余部分”,%d33 已经定义了单个字符,为什么它仍然提到“US-ASCII 的其余部分”?
什么是“引用对”?
如何解释这个定义?
我找不到文档中明确提到的任何转义序列。该标准是否没有转义序列,并且 qtext 中未定义的字符根本不允许?
如果真的有转义机制,它是什么,是否有任何库可用于将普通字符串解析为 RFC2822 引用的字符串
文档的格式让我很困惑,有没有更好的文档建议?
抱歉,我有这么多问题,感谢您的帮助。