Игровая площадка API Gmail: метод отправки, преобразованный необработанный заголовок MIME, не заполняющий поля электронной почты при отправке

Я использую игровую площадку Google OAuth 2.0 и пытаюсь отправить электронное письмо. Аутентификация работает нормально. Вот очень простое сообщение, которое я пытаюсь отправить (адрес электронной почты изменен для предотвращения спама):

 to: 'Michael To' <FakeMichael@gmail.com>
 from: 'John From' <JohnF@mydomain.com>
 subject: 'Test Message'
 htmlBody: '<b>HI!</b><br>Test Message'

Я конвертирую это в Base64 RFC 822, используя VBA, который мне это дает (я пытался поменять местами "+" и "-" для других сообщений Stackru, но безрезультатно):

dG86ICdNaWNoYWVsIFRvJyA8RmFrZU1pY2hhZWxAZ21haWwuY29tPg1mcm9tOiAnSm9obiBGcm9tJyA8Sm9obkZAbXlkb21haW4uY29tPg1zdWJqZWN0OiAnVGVzdCBNZXNzYWdlJw1odG1sQm9keTogJzxiPkhJITwvYj48YnI-VGVzdCBNZXNzYWdlJw ==

На игровой площадке мой метод POST, и я добавил 2 заголовка:

raw: and the Base64 string above (no quotes or anything)
Content-Type: message/rfc822 <I added this because I kept getting an a different error. Putting this prevetned that error>

Запросить URI (убрал https, так как SO не позволяет публиковать более двух ссылок)://www.googleapis.com/upload/gmail/v1/users/me/messages/send

Я нажимаю "отправить запрос" и получаю хороший ответ:

Вот моя просьба:

POST /upload/gmail/v1/users/me/messages/send HTTP/1.1
Host: www.googleapis.com
Raw: <string above>
Content-length: 0
Content-type: message/rfc822
Authorization: Bearer <my token>

Отклик:

HTTP/1.1 200 OK
Alternate-protocol: 443:quic,p=1
Content-length: 91
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Vary: Origin, X-Origin
Server: UploadServer ("Built on Jun 6 2015 11:14:45 (1433614485)")
Etag: "YAnoF_dHYOakPARISZQhTvRsqto/nwevNUuzaUU_lB19L-UhrwaaUSM"
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Wed, 10 Jun 2015 15:59:36 GMT
Content-type: application/json; charset=UTF-8
{
  "labelIds": [
    "SENT"
  ], 
  "id": "14dde32bc92c9XYZ", 
  "threadId": "14dde32bc92c9XYZ"
}

Однако, когда я захожу в папку с отправленной почтой Gmail, сообщение там, но в поле "Кому", "Тема" или "Тело" ничего нет: см. Снимок экрана

Я должен представить, что это что-то простое, но, поскольку я новичок в Google Gmail API, MIME и имею дело с сырьем Raw Base64, мне не очень повезло.

Спасибо заранее за любую помощь.

--- РЕДАКТИРОВАТЬ В ответ THOLLE ---

Что помогает! Я удалил необработанный заголовок строки base64 и вставил:

From: 'John From' <JohnF@mydomain.com>
Subject: Test Message
To: 'Michael To' <FakeMichael@gmail.com>
Test Message

в "Введите тело запроса", и он отправляет, что здорово!

Три дополнительных вопроса:

  1. Существуют ли какие-либо угрозы безопасности или ограничения (максимальная длина? Я вижу, что может быть ограничение в 2 МБ, но это будет много текста.) Отправлять его таким образом (в теле), в отличие от необработанной строки Base64 в заголовке?
  2. (Я об этом подробнее) Как мне сделать текст сообщения HTML? Предотвращает ли тип содержимого "Content-Type: message/rfc822" возможность отправки HTML-кода? Отправка HTML является требованием для этого приложения, и у меня не может быть двух типов контента, есть ли параметр HTML, который я могу использовать, или мне не повезло?
  3. (Я также сделаю домашнее задание по этому вопросу) Как добавить вложение, скажем, файл PDF, в электронное письмо?

Еще раз спасибо!

1 ответ

Решение

Я думаю, что вы нарушаете некоторые мелкие детали стандарта RFC 822:

Рекомендуется отправлять заголовки, если они есть, в следующем порядке: "Return- Path", "Received", "Date", "From", "Subject", "Sender", "To", "cc" и т. Д.

Я не могу найти его на всю жизнь, но я также думаю, что заголовки должны иметь заглавную букву своего первого символа. Попробуй это:

From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>

Test Message

Вы также не хотите отправлять почту в кодировке base64, если в качестве типа контента вы выбрали message/rfc822. Просто предоставьте пример почты выше, как есть.

POST /upload/gmail/v1/users/me/messages/send HTTP/1.1
Host: www.googleapis.com
Content-length: 108
Content-type: message/rfc822
Authorization: Bearer {YOUR_ACCESS_TOKEN}

From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>

Test Message

Если вы хотите HTML, просто измените ваше сообщение на это:

From: John From <JohnF@mydomain.com>
Subject: Test Subject
To: Michael To <FakeMichael@gmail.com>
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<b>Test Message</b>
Другие вопросы по тегам