由于 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 拒绝的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章