问题标签 [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 投票
1 回答
197 浏览

unicode - 电子邮件标头:FROM 标头中允许/不允许的字符:(显示)名称

我正在尝试找到有关 FROM 标头(显示)名称中允许(或不允许)哪些字符的问题的答案。

我说的是引用中的“我的显示名称”。

我查看了tools.ietf.org/html/rfc822tools.ietf.org/html/rfc2822但似乎找不到任何指定这些要求的内容。也许是因为它接受所有 unicode/UTF-8 字符,但它也没有说明这一点。

任何帮助或对某些文档的参考将不胜感激。

0 投票
1 回答
626 浏览

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 框架直接解决此问题?

0 投票
1 回答
145 浏览

php - Laravel - Swift_RfcComplianceException 仅在登台服务器 .env 文件问题上

我的暂存环境有问题,而我的本地环境中没有出现问题。

它给了我以下错误;

似乎该应用程序无法从我的 .env 文件中获取 mail_from_address 。为什么会发生这种情况,因为在我的本地环境中一切正常?

我的部署脚本中也有这些,

我在这里想念什么?有什么建议吗?问题是别的吗?

编辑2:我实际上将我的发件人地址硬编码如下,一切正常......所以问题是应用程序为什么不读取.env文件?这是某种类型的缓存问题吗?

编辑 1:我的 .env 文件中的“MAIL_FROM_ADDRESS”exixts。

编辑 3:解决方案

我在部署脚本中将 config:cache 移到了 config:clear 之前,并且应用程序能够从 .env 文件中获取电子邮件地址。

0 投票
1 回答
461 浏览

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_sa​​nitizer,它可以很好地修复错误的书写错误(大部分时间)。我不认为它会影响解析......但谁知道呢?

0 投票
1 回答
263 浏览

java - 如何正确解析收到的电子邮件标头?

解析接收到的 .eml 文件的标头以提取所有跃点信息的正确方法是什么?特别是我需要提取以下信息:

  • 发件人网址
  • 发件人 IP
  • 收件人网址
  • 接收器 IP
  • 日期
  • 协议

我找到了以下规范,但似乎没有接收到的标头格式的标准约定,并且可能因服务器而异:

  1. RFC 2821 - 网关接收线路
  2. RFC 2822 - 跟踪字段
  3. RFC 822 - 4.1 语法

对我来说,最清楚的解释是RFC 822 规范中的解释:

考虑以下received标题

变化最大的领域似乎是

  1. 主机

    例如

    • 来自 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(后缀)
  2. 邮件协议 ,例如

    • 使用 Microsoft SMTP 服务器(版本=TLS1_2,密码=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)
    • 使用 ESMTP

考虑到它们不断变化的性质,提取此类信息的综合方法是什么?SO 上的其他答案不鼓励在此任务中使用正则表达式,但是如何进行这种解析呢?如果存在一些经过测试的正则表达式或 Java 代码/库来解析接收到的标头以提取上述信息,那对我来说没问题。

0 投票
1 回答
121 浏览

node.js - 在 Node JS 中使用 gmail API 的“来自”字段的问题

我在 RFC2822 邮件的“发件人”字段中设置邮件作者时遇到问题(此处为详细信息)。问题是作者没有出现在收到的邮件中。我设置的“来自”字段如下所示:

但我也试过:

这些都不起作用,在收到的邮件中,查看原始邮件时仍然缺少名称。

这应该可以工作,因为使用 nodemailer(与 Gmail)和“来自”的相同值可以工作。有人可以解释一下发生了什么吗?我该如何解决?

编辑:我按照一条评论的要求报告了我正在使用的代码。

我将对 API 的调用与生成邮件正文的部分分开,因此调用是:

}

虽然以这种方式生成参数“mail”:

}

Mail 只是组成一个对象,该对象具有其第一个参数中给出的属性,而 b64enc() 将所有内容放入一个符合 RFC2822 的字符串中并将其编码为 base64。

EDIT2:邮件类的代码。

}

EDIT3:我添加了所需和实际行为的屏幕截图:

期望的行为,隐藏信息是发件人的电子邮件和收件人的电子邮件: 期望的行为,隐藏的信息是发件人的电子邮件和收件人的电子邮件

实际行为。不同之处在于这里没有“MyName”。 在此处输入图像描述

当然,我的电子邮件客户端中显示的内容是基于纯电子邮件中“发件人:”的内容。在第一种情况下它是“我的名字 <电子邮件地址>”,在第二种情况下它只是“电子邮件地址”。

0 投票
0 回答
335 浏览

php - PHP 邮件脚本在 IONOS Server 上不起作用

PHP-beginner 在这里尝试解决一个问题已经好几天了:

我正在尝试通过 IONOS 邮件服务器使用 PHP mail() 函数发送 html 邮件。Html 很重要,因为我想在标题(特殊字符)中设置电子邮件的编码。

不知何故,我在其他提供商的服务器上成功使用的脚本在 IONOS 服务器上不起作用。根据 IONOS 支持,电子邮件不遵循 RFC5321 和 RFC5322 标准。

我被告知要更改我的脚本,并且需要以下字段类型作为标题的一部分:“日期:”、“发件人:”、“发件人:”和“收件人:”,这些字段类型不得包括不止一次:“日期:”、“发件人:”、“发件人:”、“收件人:”、“抄送:”、“密件抄送:”、“主题:”。此外,字段类型“日期:”必须有效并遵循 RFC2822 标准。

这是我想出的:

此处缺少的变量已在前面定义。

不幸的是,这也不会通过 IONOS 邮件服务器发送邮件。

谁能指出我在哪里犯了错误?非常感谢您!

0 投票
1 回答
173 浏览

sql - RFC2822 日期时间格式到 SQL 服务器中可用的日期时间

我收到以下格式的日期时间:

如果我在 RFC2822 中更正了这一点。

我想不出将其转换为 SQl 服务器将使用的“正常”日期时间的方法。例如,我希望它是:

我尝试过 CONVERT() 之类的方法,并通过以下方式找到了一种粗略的方法:

但没有一个工作得那么好。有没有办法以“正确”的方式转换它?

编辑:

澄清:格式始终与提供的示例相同。包括日期名称。

不确定它是否总是相同的时区。我可能会从不同的时区收到它。这是需要考虑的事情。

0 投票
0 回答
49 浏览

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

特别是以下概念/问题:

  1. 什么是原子?

  2. 看起来下面4行是OR条件,%dxx是ASCII码和“;”后面的字 是解释/备注。如果是这种情况,则 %d33 + %d35-91 + %d93-126 已经定义了引用字符串中允许的字符范围而无需转义。为什么我们仍然需要第一行“NO-WS-CTL / ; Non white space controls”?另外,对于第二行,“%d33 / ; US-ASCII 的其余部分”,%d33 已经定义了单个字符,为什么它仍然提到“US-ASCII 的其余部分”?

  3. 什么是“引用对”?

  4. 如何解释这个定义?

  5. 我找不到文档中明确提到的任何转义序列。该标准是否没有转义序列,并且 qtext 中未定义的字符根本不允许?

  6. 如果真的有转义机制,它是什么,是否有任何库可用于将普通字符串解析为 RFC2822 引用的字符串

  7. 文档的格式让我很困惑,有没有更好的文档建议?

抱歉,我有这么多问题,感谢您的帮助。