Gmail PHP API发送电子邮件



我正在尝试通过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:

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

正如Eric所说,问题在于url安全基64。您需要将url转换更改为类似以下内容:

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

还要确保使用有效的邮件mime,这样"把消息放在这里"在现实中就不起作用了。您需要包含有效的头,如subject等。有一些不同的PHP库可以制作这些头,或者如果您可以自己用纯文本制作的话。

您设置为"raw"的电子邮件字符串需要使用url-safebase64编码(字母表略有不同)。

最新更新