Mailgun in .xsjs
Mailgun in .xsjs
有没有一种方法可以通过Mailgun发送一封内容超过2000个字符的html页面的电子邮件?我有这个代码,它非常适合短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还很陌生,所以答案越详细越好。如果您需要更多信息,请随时询问。非常感谢。
第1版:我应该补充一点,当我试图发送一个更大的文件时,我得到的响应是"414请求URI太大"。
编辑
这似乎是正确的方法,由OP和我自己共同想出:
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
集合中设置的所有内容作为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);
- Node.js's Buffer.writeFloatBE in Javascript
- Setting default onclick behavior for <img> tag in gene
- Lucene Search in Alfresco
- grep in JQuery to C#
- write HTML in JavaScript
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- HTMLInputElement in IE7
- Mongodb$in以与数组中相同的顺序获取结果
- element.dataset in Internet Explorer
- jQuery parent() in table
- Instagram oauth flow in angularjs
- In循环的In运算符前后
- 如何使用for in循环在javascript中显示对象中的对象
- Jquery change onchange in onload
- 重构 jQuery in JS 问题
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- TicTacToe minimax AI in Javascript
- Mailgun in .xsjs