有没有办法通过带有html页面的Mailgun发送电子邮件,其内容超过~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'变量然后将其发送到邮件。我需要的是可能让我的#34太大了#34; .html文件到正文然后将其显示为电子邮件的内容。你可能已经看到了,我在.xsjs中相当新,所以答案越详细越好。如果您需要更多信息,请随时提出。谢谢。
Edit1:我应该补充一点,当我尝试发送更大的文件时,我得到的响应是" 414 Request-URI Too Large"。
答案 0 :(得分:2)
修改强>
这似乎是正确的方法,由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));
即使请求方法是POST,$.web.WebRequest
class也会将您在.parameters
集合中设置的所有内容作为URL参数发送。这完全是正确的,POST请求可能有URL参数。但是,正如您所注意到的,URL是长度有限的。
POST请求的正文不受长度限制,但您必须自己进行适当的内容编码。 application/x-www-form-urlencoded
类型请求的正文遵循与由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);