Почтальон в.xsjs
Есть ли способ отправить электронное письмо через Mailgun с HTML-страницей, содержание которой превышает ~2000 символов? У меня есть этот код, который отлично работает для коротких HTML, так как я считаю, что он отправляется в URL-адрес:
var obj = $.request.body.asString();
var req = new $.web.WebRequest($.net.http.POST, "/messages");
req.headers.set('Content-Type', encodeURIComponent("application/x-www-form-urlencoded"));
req.parameters.set("domain", "mailgundomain.com");
req.parameters.set("from", "me@mailgundomain.com");
req.parameters.set("to", 'to@email.com');
req.parameters.set("subject", "subject");
req.parameters.set("html", obj); //email content
В приведенном выше коде я получаю файл и сохраняю его в переменную org, а затем отправляю его на почту. Что мне нужно, так это, вероятно, передать свой "слишком большой".html файл в тело, а затем показать его как содержимое письма. Как вы, наверное, видите, я совсем новичок в.xsjs, поэтому чем более подробный ответ, тем лучше. Если вам нужна дополнительная информация, не стесняйтесь спрашивать. Спасибо.
Edit1: я должен добавить, что когда я пытаюсь отправить файл большего размера, я получаю ответ "414 Request-URI Too Large".
1 ответ
РЕДАКТИРОВАТЬ
Это, кажется, правильный подход, совместно разработанный ОП и мной:
var obj = $.request.body.asString();
var req = new $.web.WebRequest($.net.http.POST, "/messages");
// request headers
req.headers.set('Content-Type', "application/x-www-form-urlencoded");
// request URL parameters
req.parameters.set("domain", "mailgundomain.com");
req.parameters.set("from", "me@mailgundomain.com");
req.parameters.set("to", 'to@email.com');
req.parameters.set("subject", "subject");
// request body
req.setBody(encodeURIComponent(message));
$.web.WebRequest
класс отправляет все, что вы установили в .parameters
collection как параметр URL, даже если метод запроса POST. Это совершенно нормально, запросы POST могут иметь параметры URL. Однако, как вы заметили, URL -адреса ограничены по длине.
Тело запроса POST не ограничено по длине, но вы должны самостоятельно выполнить правильное кодирование содержимого. Тело application/x-www-form-urlencoded
запрос типа следует тем же правилам, что и URL - key=value
пары разделены &
персонажи.
var obj = $.request.body.asString();
var req = new $.web.WebRequest($.net.http.POST, "/messages");
req.headers.set('Content-Type', "application/x-www-form-urlencoded");
var message = {
domain: "mailgundomain.com",
from: "me@mailgundomain.com",
to: "to@email.com",
subject: "subject",
html: obj
};
req.setBody(urlEncode(message));
где urlEncodedFormat()
маленькая вспомогательная функция:
function urlEncode(obj) {
return Object.keys(obj).map(function (key) {
return encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]);
}).join("&");
}
Превращение объектов в строку в кодировке URL - довольно распространенная операция. Вполне вероятно, что одна из используемых вами библиотек уже содержит функцию, которая делает это.
Хотя приведенная выше функция, вероятно, является правильной (возможны крайние значения с неопределенными или нулевыми значениями), предпочтительно не использовать свернутый вручную вариант. Потратьте некоторое время на поиск нужной функции в ваших библиотеках.
Может быть, WebRequest уже делает правильные вещи сам по себе, но у меня нет возможности проверить это. Попробуйте установить объект сообщения как тело напрямую:
req.setBody(message);