В HTTP-запросе можно указать большинство параметров несколько раз, HTTP поддерживает это из коробки. Но как это сделать при использовании класса UrlFetchApp скрипта Google Apps?
Я пытаюсь отправить почту с помощью Mailgun API и хочу прикрепить несколько вложений. Вот что об этом говорит Mailgun API:
Обратите внимание, что вы можете указать большинство параметров несколько раз, HTTP поддерживает это из коробки. Это имеет смысл для таких параметров, как cc, to или attachment.
Вот еще несколько похожих вопросов, связанных с другими языками или платформами, но ни один из них не помогает:
- Установить несколько заголовков HTTP с одинаковым именем? < / а>
- Отправка HTTP-запроса с несколькими параметрами, имеющими одинаковое имя
- обработка повторяющихся ключей в HTTP-сообщении по порядку указать несколько значений
Вот мой код, который работает с одним вложением. Обратите внимание, что функция mailgun () принимает те же аргументы, что и GmailApp.sendEmail () для единообразия:
function mailgun(recipient, subject, body, options){
var params = {
"method":"POST",
"headers": {
"Authorization" : "Basic " + Utilities.base64Encode('api:key-goes-here')
},
"payload": {
"to": recipient,
"subject": subject,
"text": body,
"html": options.htmlBody
},
"muteHttpExceptions": true,
};
if(options.hasOwnProperty("bcc"))
params.payload.bcc = options.bcc;
if(options.hasOwnProperty("cc"))
params.payload.cc = options.cc;
if(options.hasOwnProperty("replyTo"))
params.payload['h:Reply-To'] = options.replyTo;
if(options.hasOwnProperty("name")){
params.payload.from = options.name + ' <' + options.from + '>';
} else {
params.payload.from = options.from;
}
if(options.hasOwnProperty("attachments")){
params.payload.attachment = options.attachments[0];
}
var response = UrlFetchApp.fetch('https://api.mailgun.net/v3/domain.com/messages', params);
var responseCode = response.getResponseCode();
var responseObj = JSON.parse(response.getContentText());
if(responseCode != 200) return 'Mailgun error: '+responseObj.message;
return true;
}
Если я использую этот код, почта проходит, но без вложений:
if(options.hasOwnProperty("attachments")){
params.payload.attachment = [options.attachments[0],
options.attachments[1]
];
}
API Mailgun говорит: «Вы можете публиковать несколько значений вложений». Это немного вводит в заблуждение, поскольку по сути они означают, что «вы можете указать параметр вложения несколько раз» для отправки нескольких вложений.
Поскольку полезная нагрузка является объектом, это невозможно с использованием UrlFetchApp, и я думаю, единственный способ - вручную создать составную полезную нагрузку, не полагаясь на автоматическое создание UrlFetchApp.
Это запрос Curl, который работает. Необходимо подражать этому с помощью urlFetch:
curl -s --user 'api:key-goes-here' \
https://api.mailgun.net/v3/domain.com/messages \
-F from='Support <[email protected]>' \
-F [email protected] \
-F subject='Hello' \
-F text='Testing some Mailgun awesomness!' \
-F attachment='@image.png' \
-F attachment='@license.txt' \