gpt4 book ai didi

javascript - .xsjs 中的 Mailgun

转载 作者:行者123 更新时间:2023-11-29 14:44:04 25 4
gpt4 key购买 nike

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

最佳答案

编辑

这似乎是正确的方法,由 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 class将您在 .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);

关于javascript - .xsjs 中的 Mailgun,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com