Sendgrid-nodejs: わかりやすい䟋

䜜成日 2016幎06月28日  Â·  75コメント  Â·  ゜ヌス: sendgrid/sendgrid-nodejs

こんにちは、

たずえば、 https //sendgrid.com/blog/migrating-app-sendgrids-template-engine/のように、readmeにわかりやすい䟋を提䟛するずよいでしょう。なぜなら、30行を曞きたい堎合はtbhだからです。 sendgridを䜿甚しない簡単なメヌルを送信するためのjavascriptコヌドの䟋。

経隓豊富な開発者であっおも、ラむブラリを䜿甚するのは非垞にむラむラしたす。

也杯、
そしお、この怒っおいる暎蚀をお詫びしたす

psこの䟋はたさに私が探しおいるものですhttps://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/nodejs.html 、ずおも䜿いやすいです

help wanted community enhancement

最も参考になるコメント

@thinkingserious v3で導入されたすべおのSendgridヘルパヌクラスに぀いお䜕がそんなに気になるのかをようやく理解するようになりたした...それらの数が倚すぎお、メヌルの送信が䞍必芁に耇雑になりたすP

Sendgridのすべおのコヌドをオヌバヌホヌルしたくなかったので、代わりに単玔なラッパヌ、 sendgrid-mailerを䜜成するこずにしたした。

Sendgridのヘルパヌクラスはバックグラりンドで圹立ちたすが、メヌルモデルを䜜成しお怜蚌するために、APIずやり取りするためだけに匷制する必芁はないず思いたす。 Nodeアプリの䜜成が本来よりも耇雑になり、ヘルパヌの名前が非垞に混乱する可胜性があるこずがわかりたした。たずえば、 MailずEmailたす。

基本的な䟋は問題をよく瀺しおいるず思いたす。

https://github.com/sendgrid/sendgrid-nodejs#with -mail-helper-class

これは、「メヌルを送信したい」ずいう基本的なこずにはあたりにも耇雑に思えたす。 電子メヌルを送信する前に、8぀の異なる䟝存関係をロヌドし、15行のコヌドを蚘述する必芁がありたす。

ただし、ヘルパヌクラスを䜿甚しないこずは、間違いなくさらに悪いこずです。その堎合、電子メヌルJSONリク゚ストの必芁な構造を理解し、自分で正しく入力する必芁があるためです。 1぀の間違いでリク゚ストが簡単に壊れたす。

そこで、シンプルで䜿いやすいAPIヘルパヌの背埌にあるすべおのヘルパヌクラスロゞックを抜象化しお、Sendgridでメヌルを送信するのが再び簡単で楜しいものになるようにしたした:)

最も基本的な䟋は次のようになりたす。

//Load mailer and set API key (only needed once)
const mailer = require('sendgrid-mailer').config(API_KEY);

//Create email data 
const email = {
  to: '[email protected]',
  from: 'Someone <[email protected]>',
  subject: 'Hello world',
  text: 'Hello plain world!',
  html: '<p>Hello HTML world!</p>',
};

//Send away 
mailer.send(email); //Returns promise 

リク゚ストは舞台裏で䜜成され、Sendgridのヘルパヌを透過的に䜿甚したす。

たた、耇数のメヌルの送信をサポヌトし、さらにカスタマむズが必芁な堎合にSendgridオブゞェクトを公開し、Sendgrid Mailむンスタンスも受け入れ、to / fromフィヌルドのさたざたな圢匏 Name <[email protected]>などを受け入れたす。 READMEを参照しおください。

おそらくただ改善の䜙地がありたすが、Sendgrid APIに圧倒されるこずなく䜿甚したいず考えおいる人々のために、この゜リュヌションをここで共有したいず思いたした。

それが誰かにずっお圹立぀こずを願っおいたす、そしお倚分それはより単玔なAPIを公開するこずで、このラむブラリの将来のための䜕らかの方向性を提䟛するこずができたす:)

cc @julesbouは少し遅れおいたすが、それでも甚途が芋぀かるこずを願っおいたす。

党おのコメント75件

こんにちは@julesbou 、

怒っおいる暎蚀は、特に解決策が添付されおいる堎合は、私には問題ありたせん:)

お時間を割いおいただき、誠にありがずうございたす。

珟圚、次のむテレヌションの改善を蚈画しおいるので、タむミングは良かったです。

他にご芁望がございたしたら、このスレッドでお知らせいただくか、远加の問題を開いおください。

ありがずう

ヘルパヌクラスをどのように䜿甚したすか 私がしたいのはfrom名を蚭定するこずだけですか

@jsgandalf 、

最も簡単な方法は、 https  https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/helpers/mail/exampleです。 jsL4

次のように独自のjsonを䜜成するこずもできたす https 

ありがずう

非垞に圹立ちたす これはreadmeにあるはずです!!

@ jsgandalf @ thinkingserious私もラむブラリを䜿甚するのは非垞にむラむラしたす。 テンプレヌトメヌルを送信しようずしおいたす。 ここでの䟋はあたり圹に立ちたせんでした。 「to」ず「from」のメヌルアドレスを蚭定する方法がわかりたせん。このコヌドはメヌルを送信したせん。 私は過去3日間頭をかいおきたした。 䜕か助けはありたすか

フィヌドバック@bcootnerをありがずう。 あなたのリク゚ストは、これをキュヌに修正するのに圹立ちたす。 これは私がやりたいず思っおいる問題です。

それたでの間、この䟋がお圹に立おば幞いです。

var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY)

function helloTemplate(){
  var helper = require('sendgrid').mail

  from_email = new helper.Email("[email protected]")
  to_email = new helper.Email("[email protected]")
  subject = "Hello World from the SendGrid Node.js Library"
  content = new helper.Content("text/plain", "some text here")
  mail = new helper.Mail(from_email, subject, to_email, content)
  // The constructor above already creates our personalization object
  // -name- and -card- are substitutions in my template
  substitution = new helper.Substitution("-name-", "Example User")
  mail.personalizations[0].addSubstitution(substitution)
  substitution = new helper.Substitution("-card-", "Denver")
  mail.personalizations[0].addSubstitution(substitution)
  mail.setTemplateId("YOUR_TEMPLATE_ID")
  return mail.toJSON()
}

function send(toSend){
  //console.log(JSON.stringify(toSend, null, 2))
  //console.log(JSON.stringify(toSend))

  var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY)

  var requestBody = toSend
  var emptyRequest = require('sendgrid-rest').request
  var requestPost = JSON.parse(JSON.stringify(emptyRequest))
  requestPost.method = 'POST'
  requestPost.path = '/v3/mail/send'
  requestPost.body = requestBody
  sg.API(requestPost, function (response) {
    console.log(response.statusCode)
    console.log(response.body)
    console.log(response.headers)
  })
}

send(helloTemplate())

さらにサポヌトが必芁な堎合は、お問い合わせください。

@thinkingserious時間ず思慮深い応答をありがずう。 私は次のコヌドを持っおいたす

    var  sg = require('sendgrid').SendGrid("SG.**** .. ***6o");

    function welcomeTemplate() {
         console.log("template")
         var helper = require('sendgrid').mail
         from_email = new helper.Email("[email protected]")
         to_email = new helper.Email("[email protected]")
         subject = "Hello World from the SendGrid Node.js Library"
         content = new helper.Content("text/plain", "some text here")
         mail = new helper.Mail(from_email, subject, to_email, content)
         substitution = new helper.Substitution("-Name-", "bcootner")
         mail.personalizations[0].addSubstitution(substitution)
         mail.setTemplateId("5a****-*******-******-9")    //The ID of my Transactional Template
         return mail.toJSON()
}

function sendMail(toSend) {
     console.log("Send")
     var sg = require('sendgrid').SendGrid("SG.***....****o")
     var requestBody = toSend
     var emptyRequest = require('sendgrid-rest').request
     var requestPost = JSON.parse(JSON.stringify(emptyRequest))
     requestPost.method = 'POST'
     requestPost.path = '/v3/mail/send'
     requestPost.body = requestBody
     sg.API(requestPost, function (response) {
            console.log(response.statusCode)
            console.log(response.body)
            console.log(response.headers)
       })
}

そしお、このコヌドをsendMail(welcomeTemplate())呌び出したすが、それは機胜したせん。 「テンプレヌト」ず「送信」はログに衚瀺されたすが、statusCode、本文、たたはヘッダヌは衚瀺されず、電子メヌルは受信されず、ダッシュボヌドには䜕も衚瀺されたせん。

requestPost.body = requestBody埌、 console.log(JSON.stringify(requestBody))を実行しお、䜕が埗られるか教えおください。

@thinkingseriousデバッグを行った埌、 var emptyRequest = require('sendgrid-rest').request行の埌にログに䜕も出力されないようです。 最初に「テンプレヌト」がログに蚘録され、玄5分埌に「送信」が出力されたす送信関数でコメントした行のコメントを解陀するず、正垞に機胜したす。 このrequireステヌトメントに欠けおいるものはありたすか npm install sendgrid

これを詊しおください

A.次のペむロヌドを䜿甚しおpost.jsonずいうファむルを䜜成したす。

{"content":[{"type":"text","value":"Hello, World!"}],"from":{"email":"[email protected]"},"personalizations":[{"subject":"Hello, World!","to":[{"email":"[email protected]"}]}]}

B.サンプルメヌルを眮き換える

C.次のコマンドを実行したす。

curl -X "POST" "https://api.sendgrid.com/v3/mail/send" \
        -H "Authorization: Bearer $SENDGRID_API_KEY"  \
        -H "Content-Type: application/json" \
        -d @post.json

D. $ SENDGRID_API_KEYをAPIKEYに眮き換えるか、APIKeyをSENDGRID_API_KEYずいう環境倉数に远加したす

@thinkingseriousそのテストメヌルを受け取りたした。たた、 Hello Testを正垞に機胜させるこずができたした。これらのテンプレヌトは、機胜したくないだけです。

線集それで私はvar emptyRequest = require('sendgrid-rest').requestをvar emptyRequest = sg.emptyRequest()に眮き換えたした、そしおそれは電子メヌルを送りたす、テンプレヌトデザむンたたはどんな画像からのフォヌマットもありたせん。

@bcootner 、

残念ながら、私はあなたの゚ラヌを再珟するこずができないので、私は問題があるかもしれないずころを通り抜けるのを手䌝おうずしおいたす。 curl経由でメヌルを送信できるので、APIキヌが適切であるこずを意味したす。 おそらくテンプレヌトIDに問題がありたすか

mail.setTemplateId("5a****-*******-******-9")を削陀するず、メヌルは送信されたすか

@thinkingseriousしたがっお、 SendGridNode.jsラむブラリからHelloWorld 」ずいうテストが送信されたす。

私の線集を芋たかどうかはわかりたせんが、 var emptyRequest = require('sendgrid-rest').requestをvar emptyRequest = sg.emptyRequest()眮き換えるず、テンプレヌトのテキストは送信されたすが、曞匏蚭定はありたせんフォントも画像もありたせん。 コン゜ヌルから次のプリントアりトが衚瀺されたす。

2016-07-13T00:01:07.514157+00:00 app[web.1]:   date: 'Wed, 13 Jul 2016 00:01:07 GMT',
2016-07-13T00:01:07.514159+00:00 app[web.1]:   connection: 'close',
2016-07-13T00:01:07.514157+00:00 app[web.1]:   date: 'Wed, 13 Jul 2016 00:01:07 GMT',
2016-07-13T00:01:07.514158+00:00 app[web.1]:   'content-type': 'text/plain; charset=utf-8',
2016-07-13T00:01:07.502390+00:00 app[web.1]: 202
2016-07-13T00:01:07.502454+00:00 app[web.1]: 
2016-07-13T00:01:07.514155+00:00 app[web.1]: { server: 'nginx',
2016-07-13T00:01:07.514159+00:00 app[web.1]:   connection: 'close',
2016-07-13T00:01:07.514161+00:00 app[web.1]:   'x-frame-options': 'DENY' }

'text / plain'に問題があるず思われるこずがありたすが、よくわかりたせん。 再床、感謝したす

ねえ@bcootner 、私はちょうど同じ問題を経隓し、数時間頭を

_Params_

  • から䟋'[email protected] '
  • toeg'[email protected] '
  • サブゞェクト䟋「テストサブゞェクト」
  • メッセヌゞ䟋「テストメッセヌゞ」
  • テンプレヌト䜿甚したいテンプレヌトID
  • templateVariablesオブゞェクト、ここでkey-電子メヌル内の倉数、value-それを眮き換える倀 { ":name": "someName", ":email": "someEmail" } 。 :emailず:nameは、メヌルテンプレヌトで倉数を蚭定する方法であり、 -email-たたは任意の倀にするこずができたす。
  • 成功のコヌルバック
  • ゚ラヌコヌルバック
    let sendTemplateMail =  (from, to, subject, message, template, templateVariables, successCallback, errorCallback) => {
        var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY),
            helper = require('sendgrid').mail,
            content_text = new helper.Content("text/plain", message),
            content_html = new helper.Content("text/html", message),
            request = sg.emptyRequest(),
            email_to = new helper.Email(to),
            email_from = new helper.Email(from),
            mail = new helper.Mail(email_from, subject, email_to, content_text),
            personalization = new helper.Personalization();

        personalization.addTo(email_to);
        personalization.setSubject(subject);

        mail.setTemplateId(template);
        mail.addContent(content_html);

        for(var key in templateVariables) {
            if(templateVariables.hasOwnProperty(key)) {
                var substitution = new helper.Substitution(key, templateVariables[key]);
                personalization.addSubstitution(substitution);
            }
        }

        mail.addPersonalization(personalization);

        request.method = 'POST';
        request.path = '/v3/mail/send';
        request.body = mail.toJSON();

        sg.API(request, (json) => {
            if(json.statusCode >= 300) {
                errorCallback(json);
            } else {
                successCallback(json);
            }
        });
    }

ドキュメントには、基本的で単玔な䟋を䜿甚しお、実際にリファクタリングが必芁です。 私の関数があなたを助けるこずを願っおいたす:)

@ByEmkeご支揎ありがずう[email protected]たでメヌルで

ドキュメントに関しおは、メヌルヘルパヌ自䜓ず同様にリファクタリングが進行䞭です。 私たちはあなたのフィヌドバックをすべお集めおおり、次の反埩に興奮しおいたす。

たた、倧きな混乱は、テンプレヌトを䜿甚するずきにコンテンツを蚭定する必芁があるこずです。 幞いなこずに、それはすぐに数日倉わるでしょう。

@bcootnerあなたはそれを釘付けにしたず思いたす。 content_html = new helper.Content("text/html", message)が必芁です。 幞い、この芁件は数日でなくなりたす。珟圚、私たちのチヌムはこの動䜜を倉曎しおいるため、テンプレヌトを指定するずきにコンテンツを蚭定する必芁はありたせん。

@ByEmke @thinkingseこの問題に぀いおご協力ございたす。昚倜、次のコヌドで動䜜させるこずができたした。

 var sg = require('sendgrid').SendGrid("SendGrid API Key" or <environment variable>)

function sendEmail(tempID){
    var helper = require('sendgrid').mail;
    from_email = new helper.Email("[email protected]")
    to_email = new helper.Email("[email protected]")
    subject = "Dummy Subject"
    content = new helper.Content("text/html", "dummy content")
    mail = new helper.Mail(from_email, subject, to_email, content)

    substitution = new helper.Substitution("-name-", "User's Name")
    mail.personalizations[0].addSubstitution(substitution)
    mail.setTemplateId(tempID)
    var requestBody = mail.toJSON()
    var requestPost = JSON.parse(JSON.stringify(sg.emptyRequest()))
    requestPost.method = 'POST'
    requestPost.path = '/v3/mail/send'
    requestPost.body = requestBody
    sg.API(requestPost, function (response) {
       console.log(response.statusCode)
       console.log(response.body)
       console.log(response.headers)
  })
}

再床、感謝したす

たた、特にテンプレヌトやその他の機胜を䜿甚しおいる堎合は、ドキュメントをフォロヌするのが非垞に難しいず感じおいたす。

helper構文よりもrequest.body = {}構文の方が奜きです。これにより、物事がより冗長になり、読みにくくなりたす少なくずも私にずっおは。

私はかなりの時間をかけおドキュメントを調べ、倉曎をテストし、䟋を芋お、ここに来お、テンプレヌトを䜿甚するずきにコンテンツを蚭定する必芁があるこずを確認したしたが、ドキュメントには別の方法が蚘茉されおいたす。 ああ。 このようなものはあなたを怒らせるこずができたす。 ずにかく、実甚的な䟋を提䟛しおくれた@ByEmkeに称賛を

@peterkuiper たたは私はアダムず蚀うべきです:)

フィヌドバックをありがずうございたす。ラむブラリドキュメントを改善する方法に非垞に興味がありたす。

明確にするために、あなたはこれらを参照しおいたすか https://github.com/sendgrid/sendgrid-nodejs/blob/master/USAGE.md

コンテンツの問題皆さんの話を聞きたした:)に関しおは、これはほが修正されおいたす。 テンプレヌトを䜿甚するずきにコンテンツを蚭定する必芁がないリリヌスをAPIにデプロむしたす。 倉曎により、テンプレヌトの゚クスペリ゚ンスが倧幅に向䞊するこずを願っおいたす。

@thinkingserious Githubに盎接アクセスする必芁があるずきに、sendgrid.comhttps://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.htmlのドキュメントをチェックしおいたした。 私はこのリポゞトリのREADMEをざっず読み、䟋を確認し、USAGE.md私の悪いを完党に芋逃したした。 USAGE.mdファむルは、私の奜みの圢匏であるため、sendgrid.comに配眮する必芁がありたす:)テンプレヌトを䜿甚する際のいく぀かのベストプラクティスに぀いおはただわかりたせんが、自分で理解するか、ドキュメント。

私はそのファむルを閲芧しおいお、混乱しおいるず思うもののランダムな䟋を芋぀けたした。

var request = sg.emptyRequest()
request.queryParams["start_time"] = '1'
request.queryParams["limit"] = '1'
request.queryParams["end_time"] = '1'
request.queryParams["offset"] = '1'
request.method = 'GET'
request.path = '/v3/suppression/blocks'
sg.API(request, function (response) {
    console.log(response.statusCode)
    console.log(response.body)
    console.log(response.headers)
  })

start_time、limit、end_time、offsetずはどのようなタむプで、これらはどういう意味ですか より倚くのqueryParamsがありたすか そしお、なぜそれはrequest.bodyではないのですか

ナヌザヌガむドぞのリンクたったく圹に立ちたせんがありたすが、 https //sendgrid.com/docs/API_Reference/Web_API_v3/blocks.htmlをクリアするAPIドキュメントぞのリンクがあるはず

したがっお、必芁な情報がどこにあるかを芋぀けようずしお、前埌に移動する必芁がありたす。

玠晎らしいフィヌドバック@peterkuiper

私もあなたを盗み出したいです。 Tシャツのサむズず郵送先䜏所を[email protected]たで

USAGE.mdドキュメントを曎新しお、ク゚リず応答の本文の説明を含めたす。

テンプレヌトに関しおは、メヌル゚ンドポむントの堎合ず同様に、䞀般的なナヌスケヌスの䟋を備えたヘルパヌを䜜成する蚈画がありたす。 たた、テンプレヌトを䜿甚するずきにコンテンツを指定する必芁がなくなる修正がありたす。 それは倧きな混乱の原因です。

@thinkingseriousかっこいい、ありがずう:)メヌルを送信したした

そこにいる間、ベストプラクティスにも蚀及しおいるそしお私のチヌムに混乱を匕き起こしおいる䜕か他のものに気づきたした。 私のチヌムメヌトの1人が、いく぀かの機胜぀たり、電子メヌルの怜蚌のテンプレヌトを䜜成し、verify-nl、verify-enなどを远加したした。したがっお、すべおのテンプレヌトは基本的に同じで、テキスト異なる蚀語だけが異なりたす。 <subject> en <body>を芋たこずがあり、それぞの参照が芋぀かりたせんでしたTL; DRは私の郚分からかもしれたせんので、APIを䜿甚するずきに発生する内郚眮換であるず思いたす。

私は「通垞の」慣行が䜕であるか興味がありたす

  • 異なる蚀語で各機胜のテンプレヌトを䜜成し、いく぀かのマむナヌな眮換぀たり名前のみを行いたす

このアプロヌチを䜿甚するず、テンプレヌトの䞀郚を倉曎するずきに倚くの䜜業が発生する可胜性があるようです。 「テンプレヌトテンプレヌト」぀たり、ヘッダヌ/フッタヌ/その他の郚分を䜜成できるかどうかはわかりたせん。 たた、異なる蚀語がたくさんある堎合は、300個のテンプレヌトの制限に簡単に達するこずができたすこれは私たちの堎合は問題ではありたせん。

  • 機胜ごずにテンプレヌトを䜜成し、<body>を䜿甚しおアプリケヌションから本䜓を蚭定し、「マスタヌ」テンプレヌトを1぀だけ䜜成したすたたはonサブタグを䜿甚したす

質問が理にかなっおいるこずを願っおいたす:)

@peterkuiper 、

わかりたせんが、フィヌラヌをいく぀か出したした。 発芋したこずで返答したす。 ありがずう

@thinkingseriousバヌゞョン2.0.0を䜿甚するこずになりたした。これは、その動䜜が非垞に気に入っおいたす。

var client = require("sendgrid")("key");

client.send({
  to: "[email protected]",
  from: "[email protected]",
  subject: "subject",
  text:  "hello"
  // Or using the html property:
  // html: "Hello <strong>World!</strong>!"
}, fn);

これがバヌゞョン3.x.xどのように衚瀺されるかを調べおいたす。 珟圚の䟋は本圓に玛らわしいず思いたす。

玠晎らしいフィヌドバック@IonicaBizau

私たちは間違いなく次の反埩のためにあなたの考えを怜蚎したす。

@thinkingserious玠晎らしい それでも、これが3.x.xどのように衚瀺されるか知りたいです。

このクラむアントはv2メヌル゚ンドポむントから切り離しおv3゚ンドポむントぞのアクセスを蚱可するために最初から再䜜成されたため、1察1のマッピングはありたせん。

ずは蚀うものの、メヌルヘルパヌの目的は、v2の堎合ず同じように簡単に通話できるようにするこずです。 私たちはただそこにいたせん。最初に戻っお、さらに倚くの反埩を楜しみにしおいたす。

@thinkingserious私はそれを芋たしたが、私は次の点が奜きではありたせん

  1. グロヌバル倉数 varたたはletたたは同様のキヌワヌドなしで宣蚀されおいるがあるため、混乱したす。 䟋 from_email = new helper.Email("[email protected]")代わりにvar from_email = ...
  2. 電子メヌルリ゜ヌスのためだけにnew helper.Emailを䜿甚するこずは、非垞に䞍芪切です。 これは、おそらくモゞュヌル内の䜎レベルの機胜にラップするこずができたす。 Content 、 Mailなども同じです。
  3. method 、 path 、 body手動で蚭定するのは、やはり非垞に䞍䟿です。
  4. コヌルバック関数は、応答ではなく err, data, ...圢匏である必芁がありたす。

芁するに、IMHO、_quick start_は、電子メヌルを送信するための䜎レベルの実装です。 これは、より深い機胜には圹立ちたすが、_クむックスタヌト_には絶察に圹立ちたせん。 😁


玠晎らしいサヌビスずモゞュヌルをありがずうございたした。 ✹

@IonicaBizau 、

玠晎らしいフィヌドバック、ありがずう

メヌルヘルパヌの次のむテレヌションを構築するずきに、私たちは間違いなくあなたの考えを参照したす。

正解です。この最初のバヌゞョンは、APIの薄いラッパヌです。 蚈画は、あなたがしたこずのように、コミュニティのフィヌドバックに基づいおその機胜を埐々に改善するこずです

コミュニティぞのご支揎ず貢献のために、私たちはあなたにいく぀かの盗品を送りたいず思いたす。 Tシャツのサむズず郵送先䜏所を蚘茉したメヌルを

必芁に応じお、フィヌドバックを远加しおください。 再床、感謝したす

@IonicaBizau

次のようなこずもできたす。

var sg = require('sendgrid').SendGrid('API_KEY');
var request = sg.emptyRequest()

request.body = {
  "content": [
    {
      "type": "text/html",
      "value": "<html><p>Hello, world!</p></html>"
    }
  ],
  "from": {
    "email": "[email protected]",
    "name": "My Name"
  },
  "personalizations": [
    {
      "to": [
        {
          "email": "[email protected]",
          "name": "John Doe"
        }
      ]
    }
  ],
  "template_id": "TEMPLATE_ID",
};

request.method = 'POST'
request.path = '/v3/mail/send'
sg.API(request, function (response) {
  console.log(response.statusCode)
  console.log(response.body)
  console.log(response.headers)
});

私はヘルパヌ構文よりもこの構文の方が奜きです。 䟋を芋おください、圌らは私をかなり助けおくれたした。

https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/mail/mail.js

HTH

@thinkingserious Wowowow 間違いなくしたす。 ありがずう-助けおくれおうれしい 😁

@peterkuiper私もそれを詊したしたが、 text/htmlをhtmlに眮き換えるのを間違えたず思いたす。そのため、コンテンツは添付ファむルずしお衚瀺されたした。 次に、バヌゞョンをダりングレヌドするこずにしたした。

しかし、繰り返しになりたすが、これはただ䜎レベルに芋えたす request.method = ... 、 content配列でMIMEタむプを送信、コヌルバックでresponse匕数など。

ありがずう@peterkuiper

そのスタむルの䟋を先週READMEに远加したした:)

@IonicaBizau 、

はい、その䜎レベルのものはすぐに隠されたす。

@thinkingseriousリク゚ストがたもなく非衚瀺になるず聞いおうれしいです👍

@IonicaBizauのすばらしい提案に続いお、

var sg = require('sendgrid').SendGrid('API_KEY');
sg.addTo(x);
sg.addBcc(email);
sg.addBcc(email);
sg.addHeader(header);

SDKを介しおこのレベルの詳现を公開する必芁はないようです。

たた、これがすでに機胜であるかどうかはわかりたせんが、これらの呌び出しをチェヌンできるず䟿利です。

var sg = require('sendgrid').SendGrid('API_KEY');
sg.addTo(x)
  .addBcc(email)
  .addBcc(email)
  .addHeader(header)
  .send();

ありがずう、そしお良い仕事を続けおください👍

@jamesdixon 、

远加のフィヌドバックをありがずう

メヌルヘルパヌを拡匵しお実装の非衚瀺をさらに有効にするたでは、 @ adambuczynskiのすばらしいプルリク゚ストを確認しおください //github.com/sendgrid/sendgrid-nodejs/pull/261。 それはあなたの特定の考えに盎接察凊するものではありたせんが、それは正しい方向ぞの䞀歩です。

@thinkingserious䜎レベルのリク゚ストはたもなく非衚瀺になるずsendgrid-restを䜿甚できたす。 このように、このラむブラリが行う必芁があるのは、電子メヌルの送信を蚱可するこずだけです。そのため、電子メヌル送信APIのみを公開したす。

それは、関心の分離を行い、このパッケヌゞの焊点を少し狭めお、

@adambuczynski 、

私たちの蚈画は、ヘルパヌを介しお抜象化レむダヌを実行するこずです。 メヌルが最初ですが、近い将来、サブナヌザヌ管理ずテンプレヌト甚にメヌルを远加する予定です。 しかし、最初にメヌルヘルパヌを磚き、それを暙準にする必芁がありたす。

正解です。このラむブラリはsendgrid-restの非垞に薄いレむダヌであり、䟋、USAGEファむル、単䜓テストを远加するだけですこれらはすべお、 Swagger定矩を䜿甚しお自動化されおいたす[これもオヌプン゜ヌスにしたいず考えおいたす]。 長期的には、すべおの゚ンドポむントにヘルパヌコヌドを実装し、双方向のデヌタ怜蚌を完了し、その機胜のコアも自動化するこずを想定しおいたす。 ワヌクフロヌずナヌスケヌスは手䜜りされたす。

今埌数週間/数か月にわたっお、GitHubでロヌドマップを公開し、さらなるフィヌドバックを提䟛したす。

たた、8月末たでに、このラむブラリにIncoming ParseWebhookのサポヌトを远加する予定です。

この質問をしおくれおありがずう、そしお私の返事があなたずコミュニティからのさらなるフィヌドバックを匕き起こすこずを願っおいたす。 これをコミュニティ䞻導のラむブラリにし、SendGridによっおサポヌトおよび䞻導されるようにしたす。

@thinkingseriousのアップデヌトをありがずう。 今埌、sendgridnodejsラむブラリで圹割を果たしたいず思いたす。

この段階でなぜ解析サポヌトを远加するのですか 来幎1月にParseサヌビスが廃止されるず思いたした。

@thinkingseriousここで䜕かお手䌝いできるこずがあれば、pingを

@adambuczynskiそれは玠晎らしいニュヌスです たた、プルリク゚ストはトップに近づいおいたす。 来週初めにマヌゞできるようになるず思いたす。

Parseに関しおは、ただ正匏に廃止するこずを決定しおいたせん。 ラむブラリにサポヌトを远加するこずは、それを継続するかどうかを決定するためのテストの䞀郚です。

@IonicaBizau 、

ありがずうございたした どうぞよろしくお願いいたしたす。

メヌルヘルパヌを䜿甚しお耇数の受信者を蚭定する方法はありたすか
helper.Mail(from_email, subject, to_email, content)がpersonalization.addToを䜿甚しお受信者を蚭定しおいるこずに気付きたした。これは受信者の配列ではなく1人の受信者でのみ機胜しおそらく私は間違っおいたす、ヘルパヌはsetTo提䟛しないず思いたす

私はずパヌ゜ナラむれヌションを自分で蚭定しおいる堎合おいるこずがわかりlet personalization = new helper.Personalization();私は䜕ができるpersonalization.tos = [email, email]//email=new helper.Email(email_address, name) 、それは安党なのですか 将来のリリヌスで倉曎される可胜性はありたすか

@ albert-the-creator私はそれを次のように䜿甚したす

  //Helpers
  const Mail = sendgrid.mail.Mail;
  const Email = sendgrid.mail.Email;
  const Personalization = sendgrid.mail.Personalization;

  //Create new mail object
  let mail = new Mail();

  //Create recipients
  let recipients = new Personalization();
  recipients.addTo(new Email(data.to, data.toname));

  //Set recipients
  mail.addPersonalization(recipients);

たずえばルヌプでrecipients.addTo行を繰り返すこずで、耇数の受信者を远加できるず思いたす。

このアプロヌチは非垞に冗長で、Eメヌルクラスずパヌ゜ナラむれヌションクラスに分かれおいたす。 メヌルアドレスを远加しお送信したい堎合がありたすが、これを実珟するには倚くのコヌド行が必芁なように感じたす。

@ albert-the-creator、

そのコンストラクタヌは、人々が単䞀の電子メヌルをより簡単に送信できるようにするために䜜られたした。基本的には「こんにちは電子メヌル」機胜です。

耇数のメヌルの堎合は、おそらく次の䟋に埓う必芁がありたす自分でパヌ゜ナラむズを蚭定しおこのパスを開始しおいるため https 

パヌ゜ナラむズに぀いお読むこずも圹立぀堎合がありたす https 

ヘルパヌは間違いなく進化したすが、重倧な倉曎はメゞャヌポむントリリヌスで瀺されたす。 ただし、APIが倧きく倉わるこずはないず思いたす。

@adambuczynski 、

ピッチむンしおくれおありがずう このような远加の䞀般的なナヌスケヌスや、テンプレヌトを含むメヌルの送信などを考慮しお、ヘルパヌを曎新する必芁がありたす。

@thinkingseriousヘルパヌAPIは、時間があればリファクタリング/改善するこずにも興味がありたす:)

@adambuczynski 、

それはすごいです、あなたがそれを始めるこずに決めるずき、私にpingしおください。 たたは、あなたの前で開始した堎合は、pingを実行したす。

@bcootnerのコヌドを䜿甚したしたが、

@otmezger 、

フォロヌアップしおくれおありがずう

私は今週その䟋に取り組んでいたす、あなたはそれがREADMEにリンクされおいるのを芋぀けるでしょう。

テンプレヌトヘルパヌは䜿甚したせんが、ヘルパヌloadメ゜ッドを介しおHTML圢匏ずテキスト圢匏の䞡方のテンプレヌトずパヌシャルをロヌドする方法を共有したす。

  /**
   * Load an email (both plain text and html)
   */
  load(email, data, req) {

    //Get filenames
    const PARTIAL_HTML = path.resolve('./app/components/' + email + '.html');
    const PARTIAL_TEXT = path.resolve('./app/components/' + email + '.txt');

    //Append some globals
    if (req) {
      Object.assign(data, {
        app: {
          title: req.app.locals.APP_TITLE,
          version: req.app.locals.APP_VERSION,
          url: req.app.locals.APP_BASE_URL,
        },
        date: {
          year: moment().format('YYYY'),
          date: moment().format('DD-MM-YYYY'),
        },
      });
    }

    //Return promise
    return Promise.all([
      Promise.all([
        readFile(TEMPLATE_TEXT, 'utf8'),
        readFile(PARTIAL_TEXT, 'utf8'),
      ]).spread((template, partial) => {
        return template.replace('{{partial}}', partial);
      }),
      Promise.all([
        readFile(TEMPLATE_HTML, 'utf8'),
        readFile(PARTIAL_HTML, 'utf8'),
      ]).spread((template, partial) => {
        return template.replace('{{partial}}', partial);
      }),
    ]).then(result => result.map(contents => replaceData(contents, data)));
  },

次に、これを次のように䜿甚しお、Sendgridで䜿甚できるオブゞェクトを取埗できたす。

  let email = mailer.load('user/emails/verify-email-address', data, req)
    .spread((text, html) => ({
      to: user.email,
      from: req.app.locals.EMAIL_IDENTITY_NOREPLY,
      subject: 'Verify your email address',
      text, html,
    }));

ハンドルバヌテンプレヌトのようなものを䜿甚するように䟋を簡単に適合させるこずができたす。 䞊蚘の䟋では、 replaceDataヘルパヌは、ハンドルバヌのようなタグを提䟛されたデヌタに眮き換える単玔な関数です。

これが適切かどうかはわかりたせんが、「メヌルヘルパヌ」を䜿甚しないこずで、蚈り知れないほどの時間を節玄できたした。 これはずおもむラむラした埌、わざず2.0にダりングレヌドしたした。 ファクトリタむプの関数を䜿甚しお有効なV3JSONを生成しおいるだけで、V3 APIの改善に非垞に興奮しおいたす実際に䜿甚できるようになったため。

これも最初は苊劎したした。 私は思いたす
ヘルパヌはおそらくより効率的で䜿いやすくするこずができたす。 私は...するだろう
コアのsendgridモゞュヌルの䞀郚にすべきではないずさえ䞻匵したすが、
関心の分離を行い、人々がそれらを䜿甚するこずを遞択できるようにするため。

それらをもう䞀床芋お、具䜓的なものを思い付くこずができるかどうかを確認したす
提案。

金、2016幎8月26日には、午前5時48分ショヌン・リンド[email protected]は曞きたした

これが䟋によるものかどうかはわかりたせんが、「メヌルヘルパヌ」を䜿甚しないこずによっお
私は蚈り知れないほどの時間を節玄したした。 これはそうなった埌です
欲求䞍満私は故意に2.0にダりングレヌドしたした。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/sendgrid/sendgrid-nodejs/issues/252#issuecomment -242479491、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAd8Qu5iRLFQwoKlRd2fP5oioT1uLqB6ks5qjdV2gaJpZM4JAiac
。

@seanlindo 、

フィヌドバックをお寄せいただきありがずうございたす。

メヌルヘルパヌなしでこのラむブラリを䜿甚する䟋を次に瀺したす。https 

Mail Helperは最初のバヌゞョンであり、次のバヌゞョンの改善を支揎するために、あなたのようなフィヌドバックに䟝存しおいたす。 発生した特定の問題を共有しお、それらを修正するためのチケットを䜜成できるようにしおいただけたせんか。

たた、メヌルヘルパヌを改善しおキュヌの䞊䜍に移動できるように、バックログタスクに投祚を远加したす。 ありがずう

@adambuczynski 、

私はあなたの玠晎らしさが続くのを芋たす:)

私はあなたのフィヌドバックを楜しみにしおいたす、私はそれが玠晎らしいこずを知っおいたす

@julesbou 、

䞀般的なナヌスケヌスの䟋を提䟛するUSE_CASES.mdファむルを開始したした。 最初はトランザクションテンプレヌトでした:)

私はあなたのフィヌドバックを楜しみにしおいたす、私はそれが玠晎らしいこずを知っおいたす

👻

@thinkingseriousもちろんです 䞀日かそこらをください、そしお私はあなたに具䜓的な䟋を提䟛したす。

これはここで私のお気に入りのスレッドの1぀です:)

あなたのフィヌドバックは、このラむブラリの次のむテレヌションにずっお重芁になるず思いたす。これは、重倧な倉曎になる可胜性がありたす。 少し時間がありたしたら、私たちの提案をご芧ください。 https://github.com/sendgrid/sendgrid-nodejs/issues/290

ありがずう

@thinkingserious v3で導入されたすべおのSendgridヘルパヌクラスに぀いお䜕がそんなに気になるのかをようやく理解するようになりたした...それらの数が倚すぎお、メヌルの送信が䞍必芁に耇雑になりたすP

Sendgridのすべおのコヌドをオヌバヌホヌルしたくなかったので、代わりに単玔なラッパヌ、 sendgrid-mailerを䜜成するこずにしたした。

Sendgridのヘルパヌクラスはバックグラりンドで圹立ちたすが、メヌルモデルを䜜成しお怜蚌するために、APIずやり取りするためだけに匷制する必芁はないず思いたす。 Nodeアプリの䜜成が本来よりも耇雑になり、ヘルパヌの名前が非垞に混乱する可胜性があるこずがわかりたした。たずえば、 MailずEmailたす。

基本的な䟋は問題をよく瀺しおいるず思いたす。

https://github.com/sendgrid/sendgrid-nodejs#with -mail-helper-class

これは、「メヌルを送信したい」ずいう基本的なこずにはあたりにも耇雑に思えたす。 電子メヌルを送信する前に、8぀の異なる䟝存関係をロヌドし、15行のコヌドを蚘述する必芁がありたす。

ただし、ヘルパヌクラスを䜿甚しないこずは、間違いなくさらに悪いこずです。その堎合、電子メヌルJSONリク゚ストの必芁な構造を理解し、自分で正しく入力する必芁があるためです。 1぀の間違いでリク゚ストが簡単に壊れたす。

そこで、シンプルで䜿いやすいAPIヘルパヌの背埌にあるすべおのヘルパヌクラスロゞックを抜象化しお、Sendgridでメヌルを送信するのが再び簡単で楜しいものになるようにしたした:)

最も基本的な䟋は次のようになりたす。

//Load mailer and set API key (only needed once)
const mailer = require('sendgrid-mailer').config(API_KEY);

//Create email data 
const email = {
  to: '[email protected]',
  from: 'Someone <[email protected]>',
  subject: 'Hello world',
  text: 'Hello plain world!',
  html: '<p>Hello HTML world!</p>',
};

//Send away 
mailer.send(email); //Returns promise 

リク゚ストは舞台裏で䜜成され、Sendgridのヘルパヌを透過的に䜿甚したす。

たた、耇数のメヌルの送信をサポヌトし、さらにカスタマむズが必芁な堎合にSendgridオブゞェクトを公開し、Sendgrid Mailむンスタンスも受け入れ、to / fromフィヌルドのさたざたな圢匏 Name <[email protected]>などを受け入れたす。 READMEを参照しおください。

おそらくただ改善の䜙地がありたすが、Sendgrid APIに圧倒されるこずなく䜿甚したいず考えおいる人々のために、この゜リュヌションをここで共有したいず思いたした。

それが誰かにずっお圹立぀こずを願っおいたす、そしお倚分それはより単玔なAPIを公開するこずで、このラむブラリの将来のための䜕らかの方向性を提䟛するこずができたす:)

cc @julesbouは少し遅れおいたすが、それでも甚途が芋぀かるこずを願っおいたす。

@adamreisnz真剣に、ありがずう。

sendgridを介しおメヌルを送信する私のバックグラりンドゞョブはv4.0.7を䜿甚しおいたしたが、これはすでに十分に耇雑でした。 私は最新バヌゞョンにアップグレヌドしたしたが、悲しいこずにすべおが壊れたした。 メヌルを送信するのがいかに耇雑であるかずいうこずに䞍満を感じおいたので、曎新するこずすらしたせんでした。

ずはいえ、これの単玔さはたさに私が探しおいたものです。 週末に詊しおみたす。

也杯

@jamesdixon私はただv3.xxで立ち埀生しおいお、アップグレヌドしたくありたせんでした:)

うたくいけば、あなたはそれが圹に立぀ず思うでしょう。 それがあなたのためにどのように機胜するかを私に知らせおください、そしお䜕か重倧な䞍足があるならば、ありがずう

@adamreisnz 、

これは玠晎らしいです、そしおそれを私たちのコミュニティず共有しおくれおありがずう:)

tldr; 私たちのヘルパヌクラスは終了しおおらず、あなたはすでに私たちが向かっおいるずころたで私たちを打ち負かしおいたす:)

私たちはあなたの考えに完党に同意したす。これは、7぀のSDKすべおで珟圚取り組んでいるv3ラむブラリの曎新のフェヌズです。 Node.jsプロゞェクトの詳现に぀いおは、こちらのMail HelperEnhancementプロゞェクトを参照しおください。

珟圚、Cラむブラリを完成させおいたす。 私たちは、このNode.jsのラむブラリを蚈画するものの具䜓的な䟋を取埗するには、参照しおくださいこれを。 数日以内にリリヌスしたいず思っおいたす。

だから、私は提案がありたす

ここでメヌルヘルパヌに゜リュヌションを远加しおいただけたせんかCで行ったのず同様。 その堎合、あなたの仕事はより倧きなリヌチを達成するず思いたす。 そうでなければ、たったく問題ありたせん。 あなたはMITラむセンスの䞋であなたのプロゞェクトを投皿したので、私たちがあなたの良い仕事から少し借りたなら私たちを蚱しおくれるこずを願っおいたす;そしおもちろん、私たちはあなたがあなたの貢献の功瞟を認められるようにしたす。

䜜業を個別に行うこずにした堎合は、ここの[コミュニティラむブラリ]セクションにリンクを远加しおください。

玠晎らしい継続的なサポヌトに感謝したす。 あなたはロック

@thinkingseriousあなたが同じ方向に向かうこずを考えおいるず聞いおうれしいです。 Cの䟋の方が芋栄えは良いですが、JSの実装にはただやや耇雑だず思いたす。 すべおのクラスを䜜成するこずが、JSに参加するための最良の方法であるずは限りたせん。

あなたの提案に぀いおは、私はただ内郚でヘルパヌクラスを䜿甚しおいるので、公匏ラむブラリに移怍するのに実際にどれだけ圹立぀かわかりたせん。 私はおそらく、倧芏暡な曞き盎しv5などを手䌝っお、ナヌザヌずノヌドコミュニティからの入力を取り入れお、新鮮なものから始めお、䜿いやすく、必芁に応じお柔軟な玠晎らしいAPIを考え出す傟向がありたす。

しかし、それたでの間、ラッパヌからコヌドの䞀郚を借りお公匏ラむブラリで䜿甚したい堎合は、ぜひそれを利甚しおください:)そのペヌゞにラッパヌぞのリンクを远加したす🎉

私が䜜成したものず同様に、プロゞェクトを2぀のパッケヌゞに分割するこずをお勧めしたす。1぀はAPIず察話するためのリク゚ストロゞックを含む䞋䜍レベルで、もう1぀はメヌル送信専甚の䞊䜍レベルです。

䞋䜍レベルのパッケヌゞは、APIぞのフルアクセスが必芁な人に䜿甚できたすが、メヌラヌパッケヌゞは、電子メヌルを送信したい人に適しおいたす。 そしおもちろん、内郚では、メヌラヌはAPIパッケヌゞを䜿甚したす。

@thinkingseriousそれに぀いおどう思いたすか

@adamreisnz 、

い぀ものように、思慮深いフィヌドバックをありがずうございたす。

この時点でプロゞェクトを分割する必芁があるかどうかはわかりたせん。 珟圚のヘルパヌモデルでも同様の結果が埗られるず思いたす。 ずは蚀うものの、私は将来のバヌゞョンで新しいアヌキテクチャを探求するこずにオヌプンであり、そのためにあなたを参加させたいず思いたす。

うたくいけば、コミュニティの他の䜕人かが参加するでしょう。

私はこれに぀いおより深く考え、曎新されたMailHelperを実装するずきに再関䞎したす。

あなたのサポヌトず私たちのドキュメントぞのリンクを远加しおくれおありがずう

それは関心の分離の問題です。 メむンラむブラリ内に簡単に郵送するためのヘルパヌ/ラッパヌを含めるこずもできたすが、私の意芋では、䞡方の可胜性のある䞍利益たたは䞍必芁な耇雑化に察する2぀の別々の懞念が混圚しおいたす。 それらを別々に保぀こずで、消費者は必芁なラむブラリたたは䞡方を遞択できるようになり、境界が明確に定矩されおいるため、おそらく䞡方のラむブラリの開発が容易になりたす。

Nodeモゞュヌルずnpmモゞュヌルの性質䞊、関心の分離を可胜な限り分離し、各パッケヌゞに特定のタスクを実行させるそしおそれを䞊手に行うのが自然だず思いたす。 これは、Nodeを最初に䜿い始めたずきも慣れなければならなかったものですが、䞀床慣れるず、Nodeが提䟛するクリヌンでシンプルなパッケヌゞを開発する自由ず胜力が気に入りたした。

コミュニティからのコメントをお埅ちしおおりたす。

たあ、あなたは確かな議論で間違いなく説埗力がありたす:)

時間を割いおご説明いただき、誠にありがずうございたす。

私はすでにこのラむブラリでの䜜業に戻るこずを楜しみにしおいたしたが、今ではあなたずコミュニティず䞀緒にこのSDKでの䜜業に戻るこずに本圓に興奮しおいたす。

玠晎らしいです、あなたがそれに取り組む぀もりであるずき私に知らせおください:)
私は4週間䌑んでいるので、オヌプン゜ヌスプロゞェクトでも仕事をするための暇が぀いにありたす🌎

@adamreisnz 、

おめでずうございたす

はるかに高いレベルの「メヌラヌパッケヌゞ」がたさに私たちが望んでいるものです。 いく぀かのメヌルを送信する必芁がありたす。

前回のバヌゞョンでは、それは非垞に単玔でしたが、今ではひどい混乱になっおいたす。 「基本」の䟋には珟圚8぀の倉数が定矩されおおり、特別なコンストラクタヌが必芁です。 䜿いやすさの点で倧きく埌退したした。

ず同じくらい単玔でなければなりたせん

sendgrid.send({
  from: fromEmail,
  fromName: fromName,
  to: toEmail,
  subject: 'Hello'
  ...
})
.then(...)
.catch(...)
.finally(...)

ドキュメントは必芁ありたせん。コピヌしお貌り付けるこずができる䟋です。 これが私たちのチヌムにずっおのSendGridの䞻芁な䟡倀ですが、残念ながら珟圚は欠萜しおいたす。

@adamreisnz芋栄えがしたす。 非垞に明癜な蚭蚈䞊の決定。 SendGridの絊䞎蚈算に参加しおいるこずを願っおいたす。

@thinkingseriousは、メむンドキュメントを@adamreisnzプロゞェクトにこれにより、すべおが倧幅に簡玠化されたす。今日の初めにそれに぀いお知っおいたずしたら、imhoが過剰に蚭蚈されたJavaを䜿甚しようずする頭痛の時間を節玄できたでしょう。 JSでAPIに圱響を䞎えたした。 ナヌザヌが望むものではなく、ナヌザヌが望むものを提䟛しおください:-)

たた、V2 APIが廃止され、新しいアカりントがV3 APIを䜿甚するように匷制されるようになったため、他の開発者がここで頻繁に終了し始めおも驚かないこずに泚意しおください。 個人的に、私が最初に詊したのはnodemailersendgridトランスポヌトはv2でも機胜したすを䜿甚するこずでした。これは過去数十のプロゞェクトで意味がありたしたが、今回は動䜜するたでに氞遠に時間がかかりたした。 ノヌドコミュニティでのnodemailerの人気を考えれば、掚枬しなければならないのであれば、今埌数か月でこのように感じおしたうのは私だけではありたせん。

@ fisch0920フィヌドバックをありがずうございたす。今埌数週間で@thinkingseriousず協力しお

みなさん、こんにちは、

SendGrid Node.jsメヌルヘルパヌの再蚭蚈に興味があるかもしれないず思いたした https 

フィヌドバックをいただければ幞いです。

敬具、

゚ルマヌ

曎新のために378に移動しおください、ありがずう

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡