Sendgrid-nodejs: مثال سهل الفهم

تم إنشاؤها على ٢٨ يونيو ٢٠١٦  ·  75تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

مرحبا،

سيكون من الرائع تقديم مثال سهل الفهم على الملف التمهيدي الخاص بك ، شيء بسيط مثل https://sendgrid.com/blog/migrating-app-sendgrids-template-engine/ على سبيل المثال ، لأن tbh إذا أردت كتابة 30 سطرًا من كود جافا سكريبت لإرسال بريد إلكتروني بسيط لن أستخدم Sendgrid.

مكتبتك محبطة للغاية للاستخدام ، حتى بالنسبة للمطورين ذوي الخبرة.

في صحتك،
وآسف لهذا التشدق الغاضب

ملاحظة: هذا المثال هو بالضبط ما أبحث عنه https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/nodejs.html ، لذا فهو سهل الاستخدام

help wanted community enhancement

التعليق الأكثر فائدة

thinkingserious لقد توصلت أخيرًا إلى فهم ما يزعجني كثيرًا بشأن جميع فئات المساعد Sendgrid المقدمة في الإصدار 3 ... هناك عدد كبير جدًا منهم ويجعل إرسال رسائل البريد الإلكتروني معقدًا دون داعٍ:

لم أكن أرغب في إجراء إصلاح شامل لكل كود Sendgrid ، لذلك قررت إنشاء غلاف بسيط بدلاً من ذلك ، Sendgrid-mailer .

بينما تعد فئات المساعد في Sendgrid مفيدة خلف الكواليس ، لإنشاء نماذج البريد الإلكتروني والتحقق منها ، لا أعتقد أنه يجب إجبارنا على التفاعل مع واجهة برمجة التطبيقات. أجد أنه يجعل كتابة تطبيقات Node أكثر تعقيدًا مما ينبغي ، ويمكن أن تكون تسمية المساعدين مربكة للغاية ، على سبيل المثال Mail مقابل Email .

أعتقد أن المثال الأساسي يوضح المشكلة جيدًا:

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

هذا يبدو معقدًا جدًا لشيء أساسي مثل "أريد إرسال بريد إلكتروني". يتطلب منك تحميل 8 تبعيات مختلفة وكتابة 15 سطرًا من التعليمات البرمجية قبل أن تتمكن من إرسال بريد إلكتروني.

يمكن القول إن عدم استخدام الفئات المساعدة أسوأ من ذلك ، حيث يتعين عليك بعد ذلك معرفة الهيكل المطلوب لطلب JSON للبريد الإلكتروني وتعبئته بشكل صحيح بنفسك. خطأ واحد سيؤدي إلى كسر الطلب بسهولة.

لذلك قمت بتجريد كل منطق الفئات المساعدة بعيدًا عن مساعد 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 أيضًا ، ويقبل مجموعة متنوعة من التنسيقات للحقول إلى / من ، على سبيل المثال Name <[email protected]> أو كائن له خصائص الاسم / البريد الإلكتروني. انظر README لمزيد من التفاصيل.

ربما لا يزال هناك مجال للتحسين ، لكنني أردت مشاركة هذا الحل هنا للأشخاص الذين يتطلعون إلى استخدام Sendgrid API دون أن يطغى عليهم ذلك.

آمل أن يكون مفيدًا لشخص ما ، وربما يمكن أن يوفر بعض التوجيه لمستقبل هذه المكتبة ، في الكشف عن واجهة برمجة تطبيقات أبسط :)

ccjulesbou متأخر بعض الشيء ، لكن آمل أن تجد فائدة لذلك.

ال 75 كومينتر

مرحبا julesbou ،

الصراخ الغاضب لا بأس به ، خاصة إذا كان لديهم حلول مرفقة :)

شكرًا لك على الوقت الذي قضيته في إعلامنا.

نحن نخطط حاليًا لإدخال تحسينات على التكرار التالي ، لذلك كان لديك توقيت جيد!

إذا كان لديك أي طلبات معينة أخرى ، فيرجى إخبارنا إما في هذا الموضوع أو الرجاء فتح مشكلات إضافية.

شكر!

كيف نستخدم فئة المساعد؟ كل ما أريد فعله هو تعيين من الاسم ؟؟

jsgandalf ،

أسهل طريقة هي: https://github.com/sendgrid/sendgrid-nodejs#hello -email ، على وجه التحديد: https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/helpers/mail/example. شبيبة # L4

يمكنك أيضًا إنشاء json الخاص بك على النحو التالي: https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/mail/mail.js#L31 (إليك نظرة عامة على json: https: / /sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html)

شكر!

مفيد جدا! يجب أن يكون هذا في الملف التمهيدي !!

jsgandalfthinkingserious أنا أيضا العثور على مكتبة محبطة تماما للاستخدام. أحاول إرسال نموذج بريد إلكتروني. لقد وجدت الأمثلة هنا ليست مفيدة للغاية. أنا في حيرة من أمري حول كيفية تعيين عناوين البريد الإلكتروني "إلى" و "من" ، وهذا الرمز لا يرسل حتى بريدي الإلكتروني. لقد كنت أخدش رأسي خلال الأيام الثلاثة الماضية. أي مساعدة؟

شكرا لملاحظاتك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()) لكن هذا لا يعمل. يظهر "النموذج" و "الإرسال" في السجلات ولكن لا يظهر رمز الحالة أو النص الأساسي أو الرؤوس ، ولا يتم تلقي أي رسائل بريد إلكتروني ولا يظهر أي شيء في لوحة المعلومات الخاصة بي.

بعد requestPost.body = requestBody هل يمكن أن تفعل من فضلك console.log(JSON.stringify(requestBody)) و تخبرني بما ستحصل عليه.

thinkingserious بعد إجراء بعض التصحيح ، يبدو أنه لم تتم طباعة أي شيء في السجل بعد السطر var emptyRequest = require('sendgrid-rest').request . يتم تسجيل "template" أولاً ، ثم بعد حوالي 5 دقائق تتم طباعة "send" (وإذا قمت بإلغاء تعليق الأسطر التي علقت عليها في وظيفة الإرسال ، فإن ذلك يعمل بشكل جيد). هل هناك شيء أفتقده لهذا البيان المطلوب ، لقد فعلت للتو npm install sendgrid

من فضلك جرب هذا:

أ. أنشئ ملفًا يسمى post.json بالحمولة التالية:

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

ب- استبدل نماذج رسائل البريد الإلكتروني

ج- قم بتشغيل الأمر التالي:

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

د. إما أن تستبدل $ SENDGRID_API_KEY بـ API KEY ، أو أضف مفتاح API الخاص بك إلى متغير بيئة يسمى SENDGRID_API_KEY

thinkingserious لقد تلقيت هذا البريد الإلكتروني التجريبي ، وتمكنت أيضًا من الحصول على Hello Test يعمل بشكل جيد ، إنها فقط هذه القوالب لا تريد العمل.

تحرير: لذلك استبدلت var emptyRequest = require('sendgrid-rest').request بـ var emptyRequest = sg.emptyRequest() وهذا يرسل البريد الإلكتروني ، ليس هناك أي تنسيق من تصميم القالب أو أي صور.

bcootner ،

لسوء الحظ ، لا يمكنني إعادة إظهار خطأك ، لذلك أحاول المساعدة في التنقل حيث قد تكون هناك مشكلة. نظرًا لأنه يمكنك إرسال بريد إلكتروني عبر curl ، فهذا يعني أن مفتاح API الخاص بك جيد. ربما توجد مشكلة في معرف القالب؟

إذا قمت بإزالة mail.setTemplateId("5a****-*******-******-9") هل يتم إرسال البريد الإلكتروني؟

thinkingserious لذا إذا قمت بإزالة setTemplateID فإنه يرسل الاختبار "Hello World من مكتبة SendGrid Node.js".

لست متأكدًا مما إذا كنت قد شاهدت التحرير الخاص بي ، ولكن باستبدال 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' }

شيء ما يجعلني أعتقد أنها مشكلة في "نص / عادي" ، لكنني لست متأكدًا. شكرا لك مرة أخرى!

مرحبًا bcootner ، لقد واجهت للتو نفس المشكلة وكنت

_Params_

  • من (على سبيل المثال "[email protected]")
  • إلى (على سبيل المثال "[email protected]")
  • الموضوع (مثل "موضوع الاختبار")
  • رسالة (مثل "رسالة اختبار")
  • نموذج (معرف القالب الذي تريد استخدامه)
  • templateVariables (الكائن ، حيث المفتاح - متغير في البريد الإلكتروني ، القيمة - القيمة لاستبدالها) { ":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 بفضلthinkingserious لمساعدتكم في هذه القضية، تمكنت من الحصول عليها للعمل مع التعليمات البرمجية التالية الليلة الماضية:

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

شكرا لك مرة أخرى!

أشعر أيضًا أنه من الصعب جدًا متابعة المستندات ، خاصة عند استخدام القوالب وبعض الميزات الأخرى.

أنا أفضل request.body = {} بناء الجملة على بناء الجملة المساعد () لأن هذا يجعل الأمور أكثر إسهابًا وأقل سهولة في القراءة (بالنسبة لي على الأقل).

لقد أمضيت بعض الوقت في استعراض المستندات ، واختبار التغييرات ، والنظر في الأمثلة الخاصة بك والمحاولة مرة أخرى فقط المجيء إلى هنا واكتشاف أنك تحتاج إلى تعيين المحتوى عند استخدام القوالب على الرغم من أن المستندات تنص على خلاف ذلك. أرغ. أشياء مثل هذه يمكن أن تدفعك إلى الجنون. على أي حال مجد إلى ByEmke لتقديم مثال عملي.

peterkuiper (أو يجب أن أقول آدم :))

شكرًا لك على التعليقات ، نحن مهتمون جدًا بكيفية تحسين مستندات المكتبة.

لكي نكون واضحين ، هل تشير إلى هؤلاء؟ https://github.com/sendgrid/sendgrid-nodejs/blob/master/USAGE.md

فيما يتعلق بمشكلة المحتوى (لقد سمعناكم جميعًا :)) ، هذا مجرد إصلاح. سنقوم بنشر إصدار على واجهة برمجة التطبيقات لن يتطلب تعيين المحتوى عند استخدام نموذج. نأمل أن يجعل التغيير تجربة النموذج أفضل بكثير.

thinkingserious كنت أتحقق من المستندات على sendgrid.com (مثل https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) بينما كان يجب أن أذهب مباشرة إلى Github. لقد بحثت في 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)
  })

ما هي أنواع وقت البدء ، والحد ، ووقت الانتهاء ، والإزاحة وماذا تعني؟ هل هناك المزيد من الاستعلام؟ ولماذا لا يطلب أحد؟

هناك رابط إلى دليل المستخدم (وهو لا يساعد على الإطلاق) بينما كان يجب أن يكون هناك رابط إلى مستندات API الذي يمسح الأمور https://sendgrid.com/docs/API_Reference/Web_API_v3/blocks.html.

لذلك عليك أن تذهب ذهابًا وإيابًا في محاولة لمعرفة مكان العثور على المعلومات التي تحتاجها.

ردود فعل ممتازة @ peterkuiper!

أود أن أتعامل معك أيضًا. من فضلك أرسل لنا مقاس قميصك وعنوانك البريدي إلى [email protected].

سنقوم بتحديث مستندات USAGE.md لتتضمن أوصافًا لهيئات الاستعلام والاستجابة.

فيما يتعلق بالقوالب ، فإن الخطة الموجودة هي إنشاء مساعد كما فعلنا لنقطة نهاية البريد ، مع استكمال أمثلة لحالات الاستخدام الشائعة. أيضًا ، هناك إصلاح قادم حيث لن تضطر إلى تحديد المحتوى عند استخدام القوالب. هذا مصدر ارتباك كبير.

@ Thinkingserious رائع ، شكرًا :) تم إرسال البريد الإلكتروني!

أثناء وجودي فيه ، لاحظت شيئًا آخر يشير أيضًا إلى أفضل الممارسات (ويسبب بعض الارتباك لفريقي). قام أحد زملائي في الفريق بإنشاء قوالب لبعض الميزات (مثل التحقق من البريد الإلكتروني) وإضافة التحقق من nl و check-en وما إلى ذلك. لذلك كان كل قالب هو نفسه بشكل أساسي مع الاختلاف الوحيد في النص (لغة مختلفة). لقد رأيت <٪ subject٪> en <٪ body٪> ولم أتمكن من العثور على أي إشارة إليه (ربما TL ؛ DR من جهتي) لذلك أفترض أنه بديل داخلي من جانبك والذي يحدث عند استخدام API.

لدي فضول لمعرفة ما يمكن أن تكون عليه الممارسة "العادية":

  • أنشئ نموذجًا لكل ميزة بلغة مختلفة وقم فقط ببعض البدائل البسيطة (مثل الاسم)

يبدو أن استخدام هذا الأسلوب قد يتسبب في الكثير من العمل عند تغيير أجزاء من القالب الخاص بك. لست متأكدًا مما إذا كنت ستتمكن من إنشاء "قوالب قوالب" (أي رأس / تذييل / أي جزء). أيضًا ، يمكن الوصول بسهولة إلى حد 300 نموذج عندما يكون لديك العديد من اللغات المختلفة (هذه ليست مشكلة في حالتنا).

  • أنشئ قالبًا لكل ميزة واستخدم <٪ body٪> لتعيين الجسم من تطبيقك ولديك فقط قالب "رئيسي" واحد (أو استخدم علامتك الفرعية)

أتمنى أن يكون السؤال منطقيًا :)

@ 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!

سننظر بالتأكيد في أفكارك للتكرار التالي.

تضمين التغريدة ومع ذلك ، أود أن أعرف كيف سيبدو هذا في 3.x.x .

لا يوجد تعيين واحد لواحد حيث تم إعادة إنشاء هذا العميل من البداية لفصله عن نقطة نهاية البريد v2 والسماح بالوصول إلى نقاط نهاية v3.

ومع ذلك ، فإن الغرض من مساعد البريد هو الوصول إلى نقطة يمكن أن تكون فيها المكالمة سهلة كما كانت مع الإصدار 2. لم نصل إلى هناك بعد ، لقد عدنا إلى البداية ونتطلع إلى المزيد من التكرارات.

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 ، _ البدء السريع_ هو تنفيذ منخفض المستوى لإرسال بريد إلكتروني. يمكن أن يكون مفيدًا لوظائف أعمق ، ولكن بالتأكيد ليس لبداية سريعة. 😁


شكرا جزيلا على الخدمة الرائعة والوحدة. ✨

IonicaBizau ،

ردود فعل رائعة ، شكرا!

سنشير بالتأكيد إلى أفكارك بينما نبني التكرار التالي لمساعد البريد.

أنت محق ، هذا الإصدار الأول عبارة عن غلاف رفيع فوق واجهة برمجة التطبيقات. تتمثل الخطة في تحسين وظائفها تدريجيًا بناءً على تعليقات المجتمع ، مثل ما قمت به!

لدعمك ومساهمتك في المجتمع ، نود أن نرسل لك بعض الهدايا. يرجى إرسال بريد إلكتروني إلينا إلى [email protected] يتضمن مقاس قميصك وعنوانك البريدي.

لا تتردد في إضافة ملاحظات إضافية على النحو الذي تراه مناسبًا. شكرا لك مرة أخرى!

تضمين التغريدة

يمكنك أيضًا القيام بشيء مثل هذا:

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

تضمين التغريدة بالتأكيد سوف تفعل. شكرا - مسرور للمساعدة! 😁

@ peterkuiper لقد جربت ذلك أيضًا ، لكنني أعتقد أنني ارتكبت خطأ استبدال text/html بـ html وظهر المحتوى كمرفق. ثم قررت تخفيض الإصدار.

ولكن مرة أخرى، وهذا لا تزال تبدو على مستوى منخفض ( request.method = ... ، وإرسال نوع MIME في content مجموعة، response حجة في رد الخ).

شكرا @ بيتركويبر!

لقد أضفت هذا النمط من المثال إلى 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 : https://github.com/sendgrid/sendgrid-nodejs/pull/261. إنها لا تتناول فكرتك المحددة بشكل مباشر ، لكنها خطوة في الاتجاه الصحيح.

thinkingserious ذكرتم أنه سيتم إخفاء طلبات المستوى المنخفض قريبًا ، هل sendgrid-rest لذلك أيضًا. بهذه الطريقة ، كل ما يجب على هذه المكتبة فعله هو السماح لك بإرسال بريد إلكتروني ، وعلى هذا النحو فقط كشف واجهة برمجة تطبيقات إرسال البريد الإلكتروني.

كان هذا هو اهتماماتك المنفصلة وتضييق نطاق تركيز هذه الحزمة قليلاً ، مما يسمح بواجهة برمجة تطبيقات أنظف مع التسلسل وما إلى ذلك مثل اقترح

adambuczynski ،

خطتنا هي تنفيذ طبقة التجريد من خلال المساعدين. البريد هو الأول ، ولكن في المستقبل القريب نخطط لإضافة واحد لإدارة المستخدم الفرعي والقوالب. ولكن نحتاج أولاً إلى تلميع مساعد البريد وجعله المعيار.

أنت محق ، هذه المكتبة عبارة عن طبقة رقيقة جدًا فوق sendgrid-rest وتضيف ببساطة أمثلة وملف USAGE واختبارات الوحدة (هذه كلها آلية [نأمل أن نفتح المصدر هذا أيضًا] باستخدام تعريف Swagger الخاص بنا). على المدى الطويل ، نتصور تنفيذ رمز مساعد لجميع نقاط النهاية ، مع استكمال التحقق من صحة البيانات في كلا الاتجاهين ، مع جعل جوهر هذه الوظيفة مؤتمتًا أيضًا. سير العمل وحالات الاستخدام مصنوعة يدويًا.

خلال الأسابيع / الأشهر القليلة القادمة سنكشف عن خارطة الطريق هنا على GitHub لمزيد من التعليقات.

أيضًا ، بحلول نهاية شهر أغسطس ، سنضيف دعمًا للخطاف التحليلي الوارد على الويب إلى هذه المكتبة.

نشكرك على طرح هذا السؤال وآمل أن يؤدي ردي إلى مزيد من التعليقات منك ومن المجتمع. نريد أن تكون هذه مكتبة يحركها المجتمع ، تدعمها وتديرها SendGrid.

شكرا على التحديثthinkingserious. يسعدني أن ألعب دورًا في مكتبة sendgrid nodejs من الآن فصاعدًا.

لماذا تضيف دعم التحليل في هذه المرحلة؟ اعتقدت أنه تم إيقاف خدمة Parse في يناير المقبل.

thinkingserious لقد نسيت أن أذكر أنه إذا كان هناك أي شيء يمكنني المساعدة به هنا ،

adambuczynski هذه أخبار رائعة! أيضًا ، طلب السحب الخاص بك يقترب من القمة. أعتقد أنني سأتمكن من دمجها في وقت مبكر من الأسبوع المقبل.

فيما يتعلق بـ Parse ، لم نقرر التقاعد رسميًا بعد. تعد إضافة الدعم في المكتبات جزءًا من اختبارنا لتحديد ما إذا كنا سنواصل ذلك أم لا.

IonicaBizau ،

شكرا جزيلا! دعمك قدر بشكل عظيم!

هل هناك طريقة لتعيين عدة مستلمين باستخدام مساعد البريد؟
لاحظت أن helper.Mail(from_email, subject, to_email, content) يستخدم personalization.addTo لتعيين المستلم .. أعتقد أن هذا يعمل فقط مع مستلم واحد وليس مجموعة من المستلمين (ربما أكون مخطئًا) ولا يقدم المساعد setTo وظيفة (طريقة مثالية لضبط tos).

أرى أنه إذا كنت أقوم بإعداد التخصيص بنفسي باستخدام 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 ، على سبيل المثال في حلقة.

أجد هذا النهج مطولًا تمامًا ، مع تقسيمه إلى فئات البريد الإلكتروني والتخصيص. في بعض الأحيان ، ترغب فقط في إضافة عنوان بريد إلكتروني وإرساله بعيدًا ، وهذا يبدو أنك بحاجة إلى الكثير من سطور التعليمات البرمجية لتحقيق ذلك.

@ albert-the-creator،

تم تصميم هذا المُنشئ لمساعدة الأشخاص على إرسال بريد إلكتروني واحد بشكل أسهل ، وهو في الأساس وظيفة "مرحبًا بالبريد الإلكتروني".

بالنسبة إلى رسائل البريد الإلكتروني المتعددة ، ربما ترغب في اتباع هذا المثال (لأنك بدأت بالفعل في هذا المسار عن طريق تعيين التخصيص بنفسك): https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/helpers/mail /example.js#L15

قد يكون من المفيد أيضًا أن تقرأ عن التخصيصات :

سوف يتطور المساعد بالتأكيد ، ولكن سيتم الإشارة إلى أي تغييرات كسر بإصدار نقطة رئيسية. لا أتوقع أن تتغير واجهة برمجة التطبيقات كثيرًا.

adambuczynski ،

شكرا على المشاركة! نحتاج إلى تحديث المساعد ليأخذ في الاعتبار حالات الاستخدام الشائعة الإضافية مثل هذه الحالة وإرسال رسائل بريد إلكتروني باستخدام القوالب على سبيل المثال.

thinkingserious ، كانت واجهة برمجة تطبيقات المساعدين شيئًا مهتمًا أيضًا

adambuczynski ،

هذا رائع ، عندما تقرر البدء في ذلك ، يرجى الاتصال بي. أو إذا بدأنا في ذلك قبلك ، فسأرسل إليك.

لقد استخدمت الكود بواسطة bcootner وعمل جيدًا. ومع ذلك ، سيكون من الرائع أن يكون لديك مثال صحيح ورسمي لكيفية استخدام قالب مع مكون العقدة الإضافي هذا.

otmezger ،

شكرا للمتابعة!

أنا أعمل على هذا المثال هذا الأسبوع ، ستجده مرتبطًا في README.

لا أستخدم مساعد القوالب ، لكنني سأشارك أسلوبي في تحميل كل من قوالب تنسيق HTML والنص والأجزاء الجزئية عبر الأسلوب المساعد load :

  /**
   * 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 عن قصد. أنا فقط أستخدم وظيفة من نوع المصنع لإنشاء V3 JSON صالح وأنا الآن متحمس جدًا للتحسينات في V3 API (حيث يمكنني استخدامها بالفعل الآن).

هذا شيء ناضلت معه في البداية أيضًا. اعتقد ان
ربما يمكن جعل المساعدين أكثر كفاءة وأسهل في الاستخدام. أود
حتى يجادلوا بأنه ربما لا ينبغي أن يكونوا جزءًا من وحدة الإرسال الأساسية ،
من أجل فصل الاهتمامات والسماح للأشخاص بالاشتراك في استخدامها.

سألقي نظرة أخرى عليهم وأرى ما إذا كان بإمكاني التوصل إلى بعض الخرسانة
اقتراحات.

في الجمعة ، 26 أغسطس ، 2016 ، 05:48 كتب Sean Lindo [email protected] :

لست متأكدًا مما إذا كان هذا عن طريق المثال أم لا ، ولكن من خلال عدم استخدام "مساعد البريد"
لقد وفرت على نفسي قدرًا لا يُحصى من الوقت. هذا بعد الحصول على ذلك
محبطًا لقد خفضت التصنيف إلى 2.0 عن قصد.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/252#issuecomment -242479491 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAd8Qu5iRLFQwoKlRd2fP5oioT1uLqB6ks5qjdV2gaJpZM4JAiac
.

seanlindo ،

نشكرك على الوقت الذي أمضيته في تقديم بعض التعليقات!

فيما يلي مثال على استخدام هذه المكتبة بدون Mail Helper: https://github.com/sendgrid/sendgrid-nodejs#without -mail-helper-class

يعد Mail Helper هو الإصدار الأول ونحن نعتمد على التعليقات مثل تعليقاتك لمساعدتنا في تحسين الإصدار التالي. هل تمانع في مشاركة المشكلات المحددة التي واجهتك حتى نتمكن من إنشاء تذاكر لإصلاحها؟

أيضًا ، أقوم بإضافة تصويتك إلى مهمة backlog الخاصة بنا لتحسين Mail Helper للمساعدة في رفعه إلى قائمة الانتظار. شكر!

adambuczynski ،

أرى أن ذهولك يستمر :)

إنني أتطلع إلى تلقي تعليقاتكم ، وأعلم أنها ستكون رائعة!

julesbou ،

لقد بدأنا ملف USE_CASES.md حيث سنقدم أمثلة لحالات الاستخدام الشائعة. الأول كان قوالب المعاملات :)

إنني أتطلع إلى تلقي تعليقاتكم ، وأعلم أنها ستكون رائعة!

👻

تضمين التغريدة أعطني يومًا أو نحو ذلك وسأقدم لك مثالًا ملموسًا.

هذا هو أحد المواضيع المفضلة لدي هنا :)

أعتقد أن ملاحظاتك ستكون حاسمة بالنسبة للتكرار التالي لهذه المكتبة ، والذي سيكون على الأرجح تغييرًا مفاجئًا. إذا كان لديك لحظة ، هل يمكنك إلقاء نظرة على اقتراحنا؟ https://github.com/sendgrid/sendgrid-nodejs/issues/290

شكر!

thinkingserious لقد توصلت أخيرًا إلى فهم ما يزعجني كثيرًا بشأن جميع فئات المساعد Sendgrid المقدمة في الإصدار 3 ... هناك عدد كبير جدًا منهم ويجعل إرسال رسائل البريد الإلكتروني معقدًا دون داعٍ:

لم أكن أرغب في إجراء إصلاح شامل لكل كود Sendgrid ، لذلك قررت إنشاء غلاف بسيط بدلاً من ذلك ، Sendgrid-mailer .

بينما تعد فئات المساعد في Sendgrid مفيدة خلف الكواليس ، لإنشاء نماذج البريد الإلكتروني والتحقق منها ، لا أعتقد أنه يجب إجبارنا على التفاعل مع واجهة برمجة التطبيقات. أجد أنه يجعل كتابة تطبيقات Node أكثر تعقيدًا مما ينبغي ، ويمكن أن تكون تسمية المساعدين مربكة للغاية ، على سبيل المثال Mail مقابل Email .

أعتقد أن المثال الأساسي يوضح المشكلة جيدًا:

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

هذا يبدو معقدًا جدًا لشيء أساسي مثل "أريد إرسال بريد إلكتروني". يتطلب منك تحميل 8 تبعيات مختلفة وكتابة 15 سطرًا من التعليمات البرمجية قبل أن تتمكن من إرسال بريد إلكتروني.

يمكن القول إن عدم استخدام الفئات المساعدة أسوأ من ذلك ، حيث يتعين عليك بعد ذلك معرفة الهيكل المطلوب لطلب JSON للبريد الإلكتروني وتعبئته بشكل صحيح بنفسك. خطأ واحد سيؤدي إلى كسر الطلب بسهولة.

لذلك قمت بتجريد كل منطق الفئات المساعدة بعيدًا عن مساعد 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 أيضًا ، ويقبل مجموعة متنوعة من التنسيقات للحقول إلى / من ، على سبيل المثال Name <[email protected]> أو كائن له خصائص الاسم / البريد الإلكتروني. انظر README لمزيد من التفاصيل.

ربما لا يزال هناك مجال للتحسين ، لكنني أردت مشاركة هذا الحل هنا للأشخاص الذين يتطلعون إلى استخدام Sendgrid API دون أن يطغى عليهم ذلك.

آمل أن يكون مفيدًا لشخص ما ، وربما يمكن أن يوفر بعض التوجيه لمستقبل هذه المكتبة ، في الكشف عن واجهة برمجة تطبيقات أبسط :)

ccjulesbou متأخر بعض الشيء ، لكن آمل أن تجد فائدة لذلك.

adamreisnz بجدية ، شكرا لك.

كانت وظيفتي التي تعمل في الخلفية والتي ترسل رسائل البريد الإلكتروني عبر sendgrid تستخدم الإصدار 4.0.7 ، والذي كان معقدًا بدرجة كافية بالفعل. لقد قمت بالترقية إلى أحدث إصدار وللأسف تعطل كل شيء. لقد كنت محبطًا جدًا من مدى تعقيد إرسال بريد إلكتروني حتى أنني لم أزعج نفسي بتحديثه.

كل ما قيل ، بساطة هذا هو بالضبط ما كنت أبحث عنه. سأعطيها فرصة خلال عطلة نهاية الأسبوع.

في صحتك!

jamesdixon ما زلت عالقًا في الإصدار 3.xx ولم أرغب أيضًا في الترقية :)

نأمل، وسوف تجد أنه من المفيد. اسمحوا لي أن أعرف كيف يعمل من أجلك وإذا كان هناك أي شيء حرج مفقود ، شكرًا!

adamreisnz ،

هذا رائع وشكرا لمشاركته مع مجتمعنا :)

tldr. لم تنته فصول المساعدة لدينا وقد هزمتنا بالفعل إلى حيث نتجه :)

نحن نتفق تمامًا مع أفكارك وهذه هي مرحلة تحديث مكتبة الإصدار 3 الذي نعمل عليه حاليًا عبر جميع حزم SDK السبعة الخاصة بنا. يرجى الاطلاع على مشروع Mail Helper Enhancement هنا لمزيد من التفاصيل حول مشروع Node.js.

حاليًا ، نحن بصدد الانتهاء من مكتبة C #. للحصول على مثال ملموس لما نخطط له لمكتبة Node.js هذه ، يرجى الاطلاع على هذا . نأمل في إطلاق سراح ذلك في غضون أيام.

إذن لدي اقتراح:

هل تمانع في إضافة الحل الخاص بك إلى Mail Helper هنا (على غرار ما فعلناه في C #)؟ أعتقد أن عملك سيحقق وصولاً أكبر في هذه الحالة. إذا لم يكن كذلك ، فلا مشكلة على الإطلاق. نظرًا لأنك قمت بنشر مشروعك بموجب ترخيص MIT ، آمل أن تسامحنا إذا اقترضنا قليلاً من عملك الجيد ؛) وبالطبع ، سوف نتأكد من حصولك على رصيد لمساهماتك.

إذا قررت الاحتفاظ بعملك منفصلاً ، فهل يمكنك إضافة ارتباط هنا ضمن قسم مكتبات المجتمع؟

شكرا لدعمك المستمر المذهل. انت صخرة!

thinkingserious سعيد لسماع أنك تفكر في الاتجاه نفسه. يبدو مثال C # أفضل ، لكنني أعتقد أنه لا يزال معقدًا إلى حد ما لتطبيق JS. ليس بالضرورة أن تكون فصول كل شيء هي أفضل طريقة للذهاب في JS.

بالنسبة لاقتراحك ، بما أنني ما زلت أستخدم الفصول المساعدة تحت الغطاء ، فأنا لا أعرف مقدار ما سيكون مفيدًا بالفعل لنقله إلى المكتبة الرسمية. من المحتمل أن أكون أكثر ميلًا للمساعدة في إعادة الكتابة الرئيسية (على سبيل المثال v5) والبدء من جديد ، مع أخذ المدخلات من المستخدمين ومجتمع Node والتوصل إلى واجهة برمجة تطبيقات رائعة سهلة الاستخدام ومرنة إذا لزم الأمر.

ولكن إذا كنت ترغب في الوقت نفسه في استعارة بعض الكود من برنامج التضمين الخاص بي لاستخدامه في المكتبة الرسمية ، فكل ما عليك فعله هو ذلك :) سأضيف الرابط إلى الغلاف الخاص بي في تلك الصفحة 🎉

أعتقد بالفعل أنه قد يكون من الجيد تقسيم المشروع إلى حزمتين ، مستوى أدنى يتضمن منطق الطلب للتفاعل مع واجهة برمجة التطبيقات ، ومستوى أعلى فقط لإرسال رسائل البريد الإلكتروني ، على غرار ما قمت بإنشائه.

يمكن استخدام حزمة المستوى الأدنى للأشخاص الذين يحتاجون إلى وصول كامل إلى واجهة برمجة التطبيقات ، بينما ستكون حزمة الإرسال مناسبة للأشخاص الذين يرغبون فقط في إرسال رسائل بريد إلكتروني. وبالطبع تحت الغطاء ، سيستخدم مرسل البريد حزمة API.

thinkingserious ما هي أفكارك حول ذلك؟

adamreisnz ،

شكرا لك على ردود الفعل المدروسة ، كما هو الحال دائما.

لست متأكدًا مما إذا كنا بحاجة إلى تقسيم المشروع في هذه المرحلة. أعتقد أنه يمكننا تحقيق نتائج مماثلة مع النموذج المساعد الحالي. ومع ذلك ، فأنا منفتح على استكشاف بنية جديدة في إصدار مستقبلي وأود أن أشارككم في ذلك.

نأمل أن يشارك آخرون في المجتمع.

سأفكر بشكل أعمق في هذا الأمر وأعيد الاشتراك عندما يحين وقت تنفيذ مساعد البريد المحدث.

نشكرك مرة أخرى على دعمك وعلى إضافة الرابط إلى مستنداتنا!

إنها مسألة فصل المخاوف. يمكنك تضمين مساعد / مغلف لسهولة الإرسال بالبريد داخل المكتبة الرئيسية ، ولكن في رأيي أن هذا يخلط بين شاغلين منفصلين لإحداث ضرر أو مضاعفات غير ضرورية لكليهما. سيسمح فصلهما للمستهلكين باختيار المكتبة التي يحتاجون إليها (أو كليهما) ، ومن المحتمل أن يجعل تطوير كلتا المكتبتين أسهل بسبب الحدود المحددة بوضوح.

أعتقد أنه من طبيعة الوحدات النمطية Node و npm فصل الاهتمامات قدر الإمكان ، وجعل كل حزمة تقوم بمهمة محددة (وكن جيدًا فيها!). إنه شيء كان علي أن أعتاد عليه أيضًا عندما بدأت مع Node لأول مرة ، ولكن بمجرد أن فعلت ذلك ، أحببت الحرية والقدرة على تطوير حزم نظيفة وبسيطة التي توفرها.

نتطلع لسماع بعض التعليقات من المجتمع.

حسنًا ، أنت بالتأكيد مقنع بحجة قوية :)

أنا حقا أقدر لك الوقت الذي تستغرقه في التفصيل.

كنت فعلا نتطلع إلى العودة إلى العمل في هذه المكتبة، والآن كنت قد حصلت لي متحمس حقا للعودة الى العمل في هذا SDK معكم والمجتمع.

رائع ، دعني أعرف متى ستعمل على ذلك :)
أنا في إجازة لمدة 4 أسابيع ، وهذا يعني أنه سيكون لديّ في النهاية بعض وقت الفراغ للقيام ببعض الأعمال في مشاريع مفتوحة المصدر أيضًا 🌴

adamreisnz ،

مبروك!

مستوى أعلى بكثير "حزمة الإرسال" هو بالضبط ما نريده. فقط بحاجة لإرسال بعض رسائل البريد الإلكتروني.

مع الإصدار الأخير كان الأمر بسيطًا جدًا ، والآن أصبحت فوضى غير مقدسة. يحتوي المثال "الأساسي" حاليًا على 8 متغيرات محددة ، تتطلب مُنشئات خاصة. خطوة كبيرة للوراء من حيث سهولة الاستخدام.

يجب أن يكون بهذه البساطة

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

لا توجد مستندات مطلوبة ، مجرد مثال يمكننا نسخه ولصقه في طريقنا. هذه هي القيمة الأساسية لـ SendGrid لفريقنا ، وللأسف فهي مفقودة الآن.

eeosk الق نظرة على https://github.com/sendgrid/sendgrid-nodejs/issues/252#issuecomment -265934147 👍

adamreisnz تبدو رائعة ؛ قرارات تصميم واضحة للغاية. آمل أن تكون على كشوف رواتب SendGrid!

thinkingserious ، يرجى التفكير بجدية في توجيه المستندات الرئيسية إلى مشروع adamreisnz ، لأنه يبسط كل شيء بشكل كبير ، وإذا كنت قد

أيضًا ، فقط للإشارة إلى أنني لن أتفاجأ إذا بدأ مطورو آخرون ينتهي بهم الأمر هنا بشكل متكرر بعد أن تم إنهاء واجهة V2 API ، وستضطر الحسابات الجديدة إلى استخدام واجهة برمجة التطبيقات V3. شخصيًا ، كان أول شيء جربته هو استخدام nodemailer (الذي لا يزال نقل الإرسال الخاص به يعمل مع الإصدار 2) والذي كان منطقيًا لعشرات المشاريع في الماضي ولكنه استغرق وقتًا طويلاً للعمل هذه المرة. إذا كان عليّ التخمين نظرًا لشعبية nodemailer في مجتمع العقدة ، فلن أكون الوحيد الذي ينتهي به الأمر بالشعور بهذه الطريقة في الأشهر المقبلة.

@ fisch0920 شكرًا على ملاحظاتك ، سأعمل مع thinkingserious في الأسابيع القادمة لتحسين Sendgrid API. نأمل أن نتوصل إلى شيء سهل الاستخدام ولكنه لا يزال مرنًا بدرجة كافية عند الحاجة.

مرحبا بالجميع،

أعتقد أنك قد تكون مهتمًا بإعادة التصميم على SendGrid Node.js Mail Helper: https://github.com/sendgrid/sendgrid-nodejs/pull/378

سيكون محل تقدير كبير ملاحظاتك!

مع أحر تحياتي،

إلمر

يرجى الانتقال إلى # 378 للحصول على التحديثات ، شكرًا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات