Gmail не может декодировать многострочное сообщение в кодировке base64 - PullRequest
1 голос
/ 13 марта 2020

Я использую Swift_Message для создания сообщения и Swift_Mime_ContentEncoder_Base64ContentEncoder для кодирования сообщения, затем в Google_Service_Gmail_Message Я устанавливаю закодированное сообщение методом ->setRaw().

У меня есть отправлял почту с этим в течение достаточно долгого времени, и он работал нормально. Со вчерашнего дня он перестал работать, и сообщение об ошибке говорит

  "error": {
    "code": 400,
    "message": "Invalid value at 'message.raw' (TYPE_BYTES), Base64 decoding failed for \"[base64 encoded message with CRLF after every 76th character]\"",
    "errors": [
      {
        "message": "Invalid value at 'message.raw' (TYPE_BYTES), Base64 decoding failed for \"[base64 encoded message with CRLF after every 76th character]\"",
        "reason": "invalid"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }

Это работает, когда я удаляю CRLF. Есть мысли?

Ссылка: https://tools.ietf.org/html/rfc2822#section -2.1.1

Мой код

    $msg = new Swift_Message();
    $msg->setCharset('UTF-8')
        ->addTo(/*recipient*/)
        ->setSubject(/*sbject*/)
        ->addPart(/*text content*/, "text/plain")
        ->addPart(/*html content*/, "text/html");

    $base64 = (new Swift_Mime_ContentEncoder_Base64ContentEncoder)->encodeString($msg->toString());
    $base64_msg = rtrim(strtr($base64, '+/', '-_'), '=');

    $mailer  = $this->_getGmailService();// new Google_Service_Gmail(new Google_Client())
    $message = new Google_Service_Gmail_Message();
    $message->setRaw($base64_msg);
    $message->setThreadId($threadId);

    $mailer->users_messages->send('me', $message);

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Я использовал base64_encode($message->toString()); вместо

(new Swift_Mime_ContentEncoder_Base64ContentEncoder)->encodeString($msg->toString());
0 голосов
/ 13 марта 2020

Используемый вами библиотечный метод выполняет кодировку Base64, и вам нужна кодированная строка Base64URL , как указано в документации

...