由于 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->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 拒绝的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Python pyusb usb.core 访问由于权限而被拒绝,为啥 rules.d 不能修复它?
仅观看由于缺少 HealthKit info.plist 键而被拒绝的应用程序二进制文件