Mailgun in .xsjs

Mailgun in .xsjs

本文关键字:xsjs in Mailgun      更新时间:2023-09-26

有没有一种方法可以通过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);