РЕДАКТИРОВАТЬ
Этот первый фрагмент кода работает с вложениями общим размером в несколько мегабайт. Если вы хотите использовать разрешенный лимит в 35 мб, отметьте правку в конце ответа.
После того, как Стив подтолкнул меня в правильном направлении (вся почта должна быть в "исходном" параметре), я просто попробовал Python API и просмотрел сгенерированную им почту.
Почта без прикрепленных файлов
Content-Type: text/plain; charset="UTF-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
to: [email protected]
from: [email protected]
subject: Subject Text
The actual message text goes here
Письмо с вложением
Content-Type: multipart/mixed; boundary="foo_bar_baz"
MIME-Version: 1.0
to: [email protected]
from: [email protected]
subject: Subject Text
--foo_bar_baz
Content-Type: text/plain; charset="UTF-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
The actual message text goes here
--foo_bar_baz
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="example.jpg"
{JPEG data}
--foo_bar_baz--
Я просто написал свой код вокруг этого, и он отлично сработал!
var reader = new FileReader();
reader.readAsDataURL(attachment);
reader.onloadend = function (e) {
// The relevant base64-encoding comes after "base64,"
var jpegData = e.target.result.split('base64,')[1];
var mail = [
'Content-Type: multipart/mixed; boundary="foo_bar_baz"\r\n',
'MIME-Version: 1.0\r\n',
'to: [email protected]\r\n',
'from: [email protected]\r\n',
'subject: Subject Text\r\n\r\n',
'--foo_bar_baz\r\n',
'Content-Type: text/plain; charset="UTF-8"\r\n',
'MIME-Version: 1.0\r\n',
'Content-Transfer-Encoding: 7bit\r\n\r\n',
'The actual message text goes here\r\n\r\n',
'--foo_bar_baz\r\n',
'Content-Type: image/jpeg\r\n',
'MIME-Version: 1.0\r\n',
'Content-Transfer-Encoding: base64\r\n',
'Content-Disposition: attachment; filename="example.jpg"\r\n\r\n',
jpegData, '\r\n\r\n',
'--foo_bar_baz--'
].join('');
// The Gmail API requires url safe Base64
// (replace '+' with '-', replace '/' with '_', remove trailing '=')
mail = btoa(mail).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
$.ajax({
type: "POST",
url: "https://www.googleapis.com/gmail/v1/users/me/messages/send",
headers: {
'Authorization': 'Bearer ' + accessToken,
'Content-Type': 'application/json'
},
data: JSON.stringify({
raw: mail
})
});
}
Редактировать
Приведенный выше код работает, но необходимо внести несколько изменений, чтобы использовать максимальный лимит в 35 МБ.
Для письма, созданного как пример под заголовком Почта с вложением, измененный ajax-запрос выглядит следующим образом:
$.ajax({
type: "POST",
url: "https://www.googleapis.com/gmail/v1/users/me/messages/send?uploadType=multipart",
headers: {
'Authorization': 'Bearer ' + accessToken,
'Content-Type': 'message/rfc822'
},
data: mail
});
Content-Type
теперь message/rfc822
вместо application/json
, URL-адрес получил новый параметр uploadType=multipart
, и, что наиболее важно, почта больше не кодируется в формате Base64, а поставляется в формате rfc822
.
person
Tholle
schedule
25.07.2014