Я пытаюсь отправить электронное письмо через API-интерфейс Gmail ( 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:
Любая идея, что здесь происходит? Благодаря!
Строка электронной почты, на которую вы устанавливаете значение «raw», должна быть закодирована в кодировке url base64 (немного другой алфавит).
Проблема, как сказал Эрик, – это безопасная база URL 64. Вам нужно изменить преобразование URL-адреса на нечто более похожее на это:
$message_object = new Google_Service_Gmail_Message(); $encoded_message = rtrim(strtr(base64_encode("PUT MESSAGE HERE"), '+/', '-_'), '='); $message_object->setRaw($encoded_message);
Также не забудьте использовать действительный почтовый мим , поэтому «PUT MESSAGE ЗДЕСЬ» не будет работать в реальности. Вам нужно будет включить допустимые заголовки, например, тему и т. Д. Для их создания есть несколько различных библиотек PHP , или если вы можете сделать это самостоятельно в виде обычного текста.