3

~2000 文字を超える HTML ページを含むメールを Mailgun 経由で送信する方法はありますか? URLアドレスで送信されると信じているため、短いhtmlで完全に機能するこのコードがあります。

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」という応答が返されることを追加する必要があります。

4

1 に答える 1

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));

この$.web.WebRequestクラス.parametersは、リクエスト メソッドが POST であっても、コレクションに設定したすべてを URL パラメータとして送信します。これはまったく問題ありません。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 エンコードされた文字列に変換する操作は、ごく一般的な操作です。使用しているライブラリの 1 つに、それを行う関数が既に含まれている可能性があります。

上記の関数はおそらく正しいですが (未定義または null 値のエッジ ケースが存在する可能性があります)、手動でロールされたバリアントを使用しないことをお勧めします。ライブラリで適切な関数を探すのに時間を費やしてください。

おそらく、WebRequest は既にそれ自体で正しいことを行っているのでしょうが、それをテストする方法はありません。メッセージオブジェクトを本文として直接設定してみてください:

req.setBody(message);
于 2016-01-14T13:48:08.750 に答える