PHP Gmail API:可以发送电子邮件但如何添加收件人电子邮件

Posted

技术标签:

【中文标题】PHP Gmail API:可以发送电子邮件但如何添加收件人电子邮件【英文标题】:PHP Gmail API: can send email but how to add recipient email 【发布时间】:2015-04-29 01:50:06 【问题描述】:

我有一个从 https://github.com/google/google-api-php-client/ 抓取的有效 gmail api php 代码

我可以使用以下代码发送电子邮件,但没有收件人。在gmail发送的项目中我也可以看到发送的消息!

$mime = rtrim(strtr(base64_encode($_POST["message"]), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);
$x = $service->users_messages->send("me", $msg);

如何添加收件人电子邮件地址?在几篇文章中,我读到应该将To 添加到标题中。

【问题讨论】:

这个问题解决了吗?我收到“需要收件人地址”错误,但我设置了“收件人”值。 你能在哪里解决这个问题? 【参考方案1】:

是的,在电子邮件消息中添加收件人、抄送或密件抄送标头以将电子邮件发送给其他人。在您的情况下, $_POST["message"] 字符串甚至更好的是一些使用标准 php 电子邮件库的电子邮件对象。

见: https://developers.google.com/gmail/api/v1/reference/users/messages/send https://developers.google.com/gmail/api/guides/sending

【讨论】:

我很困惑。在我提到的代码中,我应该在哪里添加 To、CC 或 BCC。可以加个代码sn-p吗? 你找到解决办法了吗? 不。我放弃了计划并搬到了zapier。你可以试试这个zapier.com/apps/gmail/integrations【参考方案2】:

您应该将原始电子邮件传递给 \Google_Service_Gmail_Message() 类。 此原始消息应该是经过 base64 编码的 mime 消息。几乎你所做的一切。

但是:您不需要传递电子邮件正文(如电子邮件地址的内容),而实际上是整个电子邮件 - 带有标题。所以不应该传递$_POST["message"],而是一个准备好的包含所有必需标题的电子邮件,包括TO、FROM等。下面是一个例子:

From: sender@example.com
To: recipient@example.com
Subject: YOUR CUSTOM SUBJECT
Content-Type: text/plain; charset=UTF-8
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=5ae50a40c56153a0ca99d08aaf8f99d53f63981962d4f199b2339614636b

--5ae50a40c56153a0ca99d08aaf8f99d53f63981962d4f199b2339614636b
YOUR CUSTOM EMAIL CONTENT GOES HERE. Might be a mix of html and plain text.
--5ae50a40c56153a0ca99d08aaf8f99d53f63981962d4f199b2339614636b--

最好使用类似PHPMailer 的类来为您准备电子邮件的整个 MIME 版本,您只需将所需的数据、主题、FROM、TO、正文等传递给它的公共方法 - 然后请求MIME 使用像 $phpmailer->getSentMIMEMessage() 这样的单一方法。

【讨论】:

以上是关于PHP Gmail API:可以发送电子邮件但如何添加收件人电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中跟踪使用 GMAIL API 发送的电子邮件的已发送、已打开、已单击、已退回、已阻止等电子邮件传递状态

Gmail PHP API 发送电子邮件

Gmail API - PHP - 使用服务帐户发送电子邮件

使用 Gmail 新 API 发送带有附件的邮件,但不会显示在收件人的收件箱中

使用 gmail-api 和 google-api-php-client 发送电子邮件

退回 <nobody@gmail.com> Gmail API 发送失败