Gmail PHP API 发送电子邮件

Posted

技术标签:

【中文标题】Gmail PHP API 发送电子邮件【英文标题】:Gmail PHP API Sending Email 【发布时间】:2014-10-30 22:35:15 【问题描述】:

我正在尝试通过 Gmail php API (https://developers.google.com/gmail/api/v1/reference/users/messages/send) 发送电子邮件。在我发送消息之前,一切似乎都正常。我的代码是:

private function createMessage($email) 
    $message = new Google_Service_Gmail_Message();
     $message->setRaw(strtr(base64_encode($email), '+/=', '-_,'));      // $email is a raw email data string
    return $message;


public function sendMessage($userID, $email) 
    try 
        $msg = $this->createMessage($email);
        $this->service->users_messages->send($userID, $msg);
     catch (Exception $e) 
        print 'An error occurred: ' . $e->getMessage();
    

代码在该行中断:

$this->service->users_messages->send($userID, $msg);

出现错误:

An error occurred: Error calling POST https://www.googleapis.com/gmail/v1/users/myemailaddress@gmail.com/messages/send: (400) Invalid value for ByteString:

知道这里发生了什么吗?谢谢!

【问题讨论】:

您能否提供您发送的完整原始消息的示例?我很难发送电子邮件。 【参考方案1】:

问题,就像 Eric 所说,是 url 安全 base 64。您需要将 url 转换更改为更像这样的东西:

$message_object = new Google_Service_Gmail_Message();
$encoded_message = rtrim(strtr(base64_encode("PUT MESSAGE HERE"), '+/', '-_'), '=');
$message_object->setRaw($encoded_message);

还要确保使用有效的mail mime,因此“在此处输入消息”实际上不起作用。您需要包含有效的标题,如主题等。有some various PHP libraries 可以制作这些,或者您可以自己制作纯文本。

【讨论】:

【参考方案2】:

您设置为“原始”的电子邮件字符串需要 url 安全 base64 编码(字母表略有不同)。

【讨论】:

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

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

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

使用 PHP 向使用 Gmail API 发送的电子邮件添加密件抄送

收件人地址需要代码”:400 在 Laravel PHP 中使用 Gmail API 发送电子邮件

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

通过 Gmail API 发送电子邮件时应用 MSO 条件语句