我正在尝试通过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:
知道这里发生了什么吗?谢谢!
答案 0 :(得分:5)
像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);
同时确保使用有效的mail mime,因此“PUT MESSAGE HERE”在现实中无效。您需要包含有效的标题,例如主题等。有some various PHP libraries来制作这些标题,或者如果您可以自己以纯文本形式制作。
答案 1 :(得分:4)
您设置为' raw'的电子邮件字符串需要 url safe base64编码(字母略有不同)。