我正在尝试通过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编码(字母表略有不同)。