由于 To 标头而被 Gmail API 拒绝的电子邮件

Posted

技术标签:

【中文标题】由于 To 标头而被 Gmail API 拒绝的电子邮件【英文标题】:Email rejected by the Gmail API because of To header 【发布时间】:2021-11-14 21:18:25 【问题描述】:

我正在尝试通过 Gmail API 发送一封简单的电子邮件,但由于符合 RFC822 的 To: undisclosed-recipients:; 标头而失败。在 To 标头中使用常规地址发送工作正常。 RFC822 消息由 phpMailer 创建并使用preSend()getSentMIMEMessage() 恢复。

我做错了什么?

消息

Date: Tue, 21 Sep 2021 09:13:17 +0000
From: Rec1 <fictive1@gmail.com>
Cc: "Rec2 (fictive2@gmail.com)" <fictive2@gmail.com>
Bcc: fictive3@gmail.com
Message-ID: <vysFE9wLykAQc73VcxjiTfjPaZQJ5ge7jXqWbNeg@vps>
X-Mailer: PHPMailer 6.5.1 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="b1_vysFE9wLykAQc73VcxjiTfjPaZQJ5ge7jXqWbNeg"
Content-Transfer-Encoding: 8bit
To: undisclosed-recipients:;
Subject: test

This is a multi-part message in MIME format.

--b1_vysFE9wLykAQc73VcxjiTfjPaZQJ5ge7jXqWbNeg
Content-Type: text/plain; charset=us-ascii

body

--b1_vysFE9wLykAQc73VcxjiTfjPaZQJ5ge7jXqWbNeg
Content-Type: text/html; charset=us-ascii

<div dir="ltr">body</div>


--b1_vysFE9wLykAQc73VcxjiTfjPaZQJ5ge7jXqWbNeg--

答案


  "error": 
    "code": 400,
    "message": "Invalid To header",
    "errors": [
      
        "message": "Invalid To header",
        "domain": "global",
        "reason": "invalidArgument"
      
    ],
    "status": "INVALID_ARGUMENT"
  

【问题讨论】:

尝试实际发送没有收件人地址、抄送和密件抄送地址的电子邮件。从 mail.google.com 网络界面发送相同的电子邮件可以正常工作,并且原始邮件可以通过To: undisclosed-recipients:; 标头到达目的地。 未公开收件人和密件抄送应该基本一致。使其在应用程序脚本(基本上类似于 gmail api)中与 MailApp 一起使用,只有密件抄送,没有“致收件人”。标头会将收件人的电子邮件显示为“收件人”,但仅显示他/她的电子邮件,而不是原始密件抄送收件人上的其他电子邮件。这不是一种选择吗? PHPMailer 会自动添加 To: undisclosed-recipients:; 是 AddAddress() 从未被调用过 对我来说看起来像是 gmail 中的一个错误。 知道如何正式举报吗? 【参考方案1】:

尝试手动添加undisclosed-recipients:;,然后添加密件抄送。

$mail->AddAddress("undisclosed-recipients:;");
$mail->AddBCC("username@domain.com");

在这篇文章上工作:

Sending mail with Phpmailer, BCC only, hiding TO header field

您有不同的问题,但如果手动设置,它也可能解决有关标题无效的问题。

【讨论】:

在发布问题之前尝试过,但它不起作用,就像那里的 cmets 状态一样。 $mail-&gt;AddAddress("undisclosed-recipients:;"); 返回 false 并且生成的邮件包含 Gmail API 不接受的相同 To 标头。 @Dude,如果可能的话,你能不能试着用正确的“收件人”来获取邮件,然后修改它以模仿在 gmail 中只有密件抄送而没有“收件人”的正确发送的电子邮件?如果可能的话。如果是我,我会从这里开始。 我试过了,mail.gmail.com 本身就像 PHPMailer 一样发送电子邮件——To 标头是相同的,To: undisclosed-recipients:;。他们通过他们的网站发送相同的标头,但不通过他们的 API 接受。 @Dude,如果是这样的话,那就太不幸了。 @Dude,你可以把它归档在issuetracker.google.com

以上是关于由于 To 标头而被 Gmail API 拒绝的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

MIME 标头无法通过 Gmail API

由于应用内购买而被应用商店拒绝

为啥 Python pyusb usb.core 访问由于权限而被拒绝,为啥 rules.d 不能修复它?

仅观看由于缺少 HealthKit info.plist 键而被拒绝的应用程序二进制文件

作为发件人,使用 API 或标头,是不是可以检测电子邮件是不是使用 Gmail 的“计划发送”发送?

由于“中继访问被拒绝”而被阻止的 Azure Sql 托管实例数据库邮件到外部电子邮件