Код адреса получателя ": 400 при отправке электронного письма с использованием Gmail API в Laravel PHP.

Я пытаюсь отправить электронное письмо через свою систему через интеграцию с Gmail API, но получаю сообщение об ошибке, т. Е.

Google_Service_Exception { "ошибка": { "ошибки": [ { "домен": "глобальный", "причина": "invalidArgument", "сообщение": "Требуется адрес получателя" } ], "код": 400, "сообщение": "Требуется адрес получателя" } }

Вот код в Laravel:

$obj = new \Google_Service_Gmail_Message ();
$raw = "MIME-Version: 1.0\n\r
From: Muhammad Bilal <muhammad.bilal@dynamologic.com>\n\r
To: Umer Sheikh <umer.sheikh@dynamologic.com>\n\r
Subject: SIMPLE TEXT EMAIL\n\r
Date: Thu, 5 Mar 2020 18:45:33 +0500\n\r
Message-ID: <1234@local.machine.example>\n\r
Content-Type: text/plain; charset=\"UTF-8\"\n\r
\n\r
NO BODY";
$raw = rtrim(strtr(base64_encode($raw), '+/', '-_'), '=');
$obj->setRaw($raw);
$obj->setId('1234');
$obj->setInternalDate(null);
$obj->setLabelIds(null);

$payload = new \Google_Service_Gmail_MessagePart ();
$body = new \Google_Service_Gmail_MessagePartBody ();
$body->setData('test');
$body->setSize('1');

    $payload->setBody($body);
    $obj->setPayload($payload);
    $results = $service->users_messages->send($user, $obj);

2 ответа

Проблема решена, найден работающий образец кода

    $user = 'me';
    $strSubject = 'Test mail using GMail API' . date('M d, Y h:i:s A');
    $strRawMessage = "From: Muhammad Bilal <muhammad.bilal@dynamologic.com>\r\n";
    $strRawMessage .= "To: Muhammad Bilal <mb3451@yahoo.com>\r\n";
    $strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n";
    $strRawMessage .= "MIME-Version: 1.0\r\n";
    $strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
    $strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
    $strRawMessage .= "this <b>is a test message!\r\n";
    $mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
    $msg = new \Google_Service_Gmail_Message();
    $msg->setRaw($mime);
    $service->users_messages->send("me", $msg);

Сообщение об ошибке, которое вы получаете, связано с тем, что Content-Type должен быть типа message/rfc822а не text/plain:

Как упоминалось в Users.messages: sendдокументация:

Этот метод поддерживает URI / upload и принимает загруженные медиафайлы со следующими характеристиками:

  • Максимальный размер файла: 35 МБ

  • Допустимые типы MIME мультимедиа: message/rfc822

Следовательно, все сообщение электронной почты должно быть в строке с кодировкой base64url в формате RFC 2822.

Справка

Другие вопросы по тегам