他当我使用 RESTFul api 将消息插入 Gmail 时,我从rfc822 MimeMessage加载消息,该消息包含原始 *"Received"* 标头,例如具有值Thu, 27 Feb 2014 19:57:07 -0800 (太平洋标准时间)。当此邮件插入 Gmail 时,会添加一个新的“已接收”标头,并且它具有插入时间的日期时间戳,并且原始标头未显示在 UI 中,它显示在电子邮件中,但其值为不用于显示插入消息的时间。有没有办法改变这种行为?
谢谢
您是否尝试过在插入请求中将“internalDateSource”查询参数设置为“dateHeader”值?默认情况下,它使用“receivedTime”,这将导致您描述的功能。
这是供参考的链接。您可以在“参数”标题下找到您要查找的信息:
https ://developers.google.com/gmail/api/v1/reference/users/messages/insert
一旦我将代码更改为设置 internalDateSource = "dateHeader" ,邮件的原始日期值就会显示在用户的 Gmail 邮箱中,而不是服务器收到邮件的时间。我在用户邮箱的搜索栏中使用before:命令进行了测试,以确保它有效。
以下是命令列表:https:
//support.google.com/mail/answer/7190
FWIW,我正在使用 Gmail API 的 .NET Client API 包装器,所以我没有直接进行 REST 调用。但是,在 .NET 中设置与此值相关的属性似乎对我有用。希望这对你有用。
附加的 Received 标头是良性的。您所说的是消息的内部日期是基于 Date 标头还是当前时间戳。正如您所注意到的,目前它始终使用当前时间并且不允许使用日期。
您使用的是messages.insert 还是messages.import(或其他类似messages.send 的东西)?
对于messages.insert 和messages.import(仅限于当前邮箱),允许内部日期作为“日期”标头似乎是一个合理的选择。不适用于诸如messages.send之类的东西,尽管有伪造的潜力等。
我相信这是设计使然,即使对于通过正常渠道收到的邮件也是如此。考虑到标题可能是伪造的,例如,我可以制作一封电子邮件,显示它是一年前发送的,然后现在发送给您。在查看收件箱时,您是否希望依赖(可能是假的或不正确的)标题或实际收到的时间?因此,您真正要求的是更改 Google 服务器接收电子邮件的时间,公共 GMail API 不会公开该功能。
不过还不错,搜索旧的导入电子邮件使用发送日期标题而不是接收日期标题,因此您仍然可以按时间范围进行过滤。