Sendgrid-nodejs: νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ—μ„œλŠ” λŒ€μ²΄κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 12μ›” 08일  Β·  20μ½”λ©˜νŠΈ  Β·  좜처: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

문제 μš”μ•½

이 라이브러리λ₯Ό μ‚¬μš©ν•  λ•Œ λŒ€μ²΄κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 컬을 μ‚¬μš©ν•  λ•Œ μž‘λ™ν•©λ‹ˆλ‹€.

μž¬ν˜„ 단계

  1. SendGrid κ³„μ •μ—μ„œ νŠΈλžœμž­μ…˜ 이메일 ν…œν”Œλ¦Ώ λ§Œλ“€κΈ°
  2. ν…œν”Œλ¦Ώμ— <% body %>, % firstName % λ˜λŠ” λ‘˜ λ‹€ 포함 (λ‘˜ λ‹€ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€)
  3. 이 λ…Έλ“œ μ½”λ“œ μ‹€ν–‰ (ꡬ성 μž…λ ₯)
`'use strict';

var config = {

    apiKey: '',
    from: '',
    to: '',
    templateId: ''

}

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);

async function sendTest() {

 var newMsg = {

   "from": {
    "name": "Test Script",
    "email": config.from
   },
   "personalizations": [{
    "to": config.to,
    "substitutions": {
     "-firstName-": "Maciejs", 
     "%firstName%": "Maciej",
     "-first_name": "Maciej",
     "%first_name%": "Maciej"
    }
   }],
   "subject": "test subject",
   "content": [{
     "type": "text/plain",
     "value": "Hello, %firstName%!"
    },
    {
     "type": "text/html",
     "value": "<html><p>Hello, %firstName%!</html> "
    }],
    "template_id": config.templateId
 }

   await sgMail.send(newMsg);

}

sendTest();`
  1. 전달 된 μ΄λ©”μΌμ—μ„œ 아무 것도 λŒ€μ²΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•˜μ§€λ§Œ 컬과 μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

SendGrid νŽΈμ§‘κΈ°μ˜ ν…œν”Œλ¦Ώ 슀크린 샷과받은 이메일도 μ²¨λΆ€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
screenshot from 2017-12-08 10-36-26

기술적 μ„ΈλΆ€ 사항:

  • sendgrid-nodejs 버전 : 6.1.4
  • Node.js 버전 : 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜ 같은 절망적 인 μ–΄μ œ λͺ¨λ‘μ—κ²Œ : V3 API에 μ‚¬μš©ν•  ν•„μš”κ°€ dynamic_template_data λŒ€μ‹  substitutions 이 아직 μ–΄λ”” λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€!

그런 λ‹€μŒ μ‚¬μš© {{var_name}} 이메일 ν…œν”Œλ¦Ώκ³Ό dynamic_template_data: { var_name: "var_value" } API의 ν˜ΈμΆœμ„.

λͺ¨λ“  20 λŒ“κΈ€

@MaciejKrawczyk setSubstitutionWrapper λ₯Ό μ‚¬μš©ν•˜κ³  substitutions μ—μ„œ 래퍼λ₯Ό μƒλž΅ ν•΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

μ „μ˜:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

이런 μ‹μœΌλ‘œ ν•œ λ²ˆμ— μ—¬λŸ¬ 래퍼λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법은 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ λŒ€μ²΄ 속성에 래퍼λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨μ΄ 버전을 μ‚¬μš©ν•˜λŠ” μž μˆ˜ν•¨μ„ 얻을 μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ κ΅¬λ…μž λͺ¨μŠ΅
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

νš¨κ³Όκ°€μžˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

@kmcurryλ₯Ό 도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

@MaciejKrawczykλ₯Ό μ‹€ν–‰ ν•΄ μ£Όμ…”μ„œ κΈ°μ©λ‹ˆλ‹€!

이것은 ν™•μ‹€νžˆ README에 λ„£μ–΄μ•Όν•©λ‹ˆλ‹€! 이것을 μ•Œμ•„λ‚΄λŠ” 데 2 β€‹β€‹μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€!

@LASkuma ,

그것은 쒋지 μ•Šλ‹€ :(

이 λ¬Έμ„œκ°€ λ„μ›€μ΄λ©λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ λͺ…ν™•ν•œ 링크가 μžˆλŠ”μ§€ 확인할 수 μžˆλ„λ‘ 처음으둜 도움을 μš”μ²­ν•œ 곳을 μ•Œλ € μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

감사!

λ§ˆμŒμ„ λ‹΄μ•„,

Elmer

@thinkingserious λ„€. 이 λ¬Έμ„œλŠ” λ§Žμ€ λ„μ›€μ΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λŒ€μ²΄ 킀에 λž˜νΌκ°€ ν¬ν•¨λ˜μ–΄μ•Όν•˜λŠ” 곡식 μ›Ή μ‚¬μ΄νŠΈμ—μ„œ μ™”κΈ° λ•Œλ¬Έμ— μ‚¬μš© μ‚¬λ‘€μ—λ³„λ‘œ 신경을 쓰지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @LASkuma ,

곡식 μ›Ή μ‚¬μ΄νŠΈμ—μ„œ μ™”λ‹€κ³  ν•  λ•Œ μ–΄λ–€ URL을 μ°Έμ‘°ν•˜κ³  μžˆλŠ”μ§€ μ•Œλ €μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? 감사!

μ•ˆλ…•ν•˜μ„Έμš” @thinkingserious ,
λ‚˜λŠ” 이 νŽ˜μ΄μ§€λ₯Ό μ–ΈκΈ‰ν•˜κ³  μžˆμ—ˆλ‹€. μ‹œλ„ν•΄λ³΄κΈ° μ„Ήμ…˜μ—λ„ λž˜νΌκ°€ 포함 된 λŒ€μ²΄ ν‚€κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œλ₯Ό 읽은 ν›„ Node λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λ¬Έμ„œμ™€ μžμ—°μŠ€λŸ½κ²Œ μΌμΉ˜ν•œλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€ @LASkuma!

정말 μœ μš©ν•œ ν”Όλ“œλ°±μž…λ‹ˆλ‹€.

κ·Έλž˜λ„ μ†”λ£¨μ…˜μ— λŒ€ν•΄ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¬Έμ„œλŠ” API와 직접 μƒν˜Έ μž‘μš©ν•˜κ³  λ„μš°λ―Έ 라이브러리 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ €λŠ” μ‚¬λžŒλ“€μ„μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€.

μ•žμ„œ README에이 λ¬Έμ„œλ₯Ό ν¬ν•¨ν•΄μ•Όν•œλ‹€κ³  μ–ΈκΈ‰ν•˜μ…¨μŠ΅λ‹ˆλ‹€. μ—¬κΈ° λ₯Ό μ˜λ―Έν•©λ‹ˆκΉŒ? κ±°κΈ°μ—μ„œ λŒ€μ²΄ μ‚¬μš© 사둀λ₯Ό ꡬ체적으둜 μ–ΈκΈ‰ν•΄μ•Όν•©λ‹ˆκΉŒ?

도와 μ£Όμ…”μ„œ λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

λ§ˆμŒμ„ λ‹΄μ•„,

Elmer

이것은 ν™•μ‹€νžˆ readme에 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. λ‚˜λŠ” λͺ¨λ“  것을 μ‹œλ„ν–ˆκ³ , SendGrid api referenceμ—μžˆλŠ” λͺ¨λ“  λ¬Έμ„œλ₯Ό 읽고, GitHubμ—μžˆλŠ” λͺ¨λ“  것을 (λ‚΄ 생각에), μ§€μ›νŒ€μ— μ—°λ½ν–ˆκ³ , @kmcurryκ°€ μ•„λ‹ˆλΌλ©΄ λ‚΄ API 래퍼λ₯Ό

κ°μ‚¬ν•©λ‹ˆλ‹€ @MaciejKrawczyk ,

이것은 맀우 쒋은 ν”Όλ“œλ°±μ΄λ©° 더 심측적 인 뢄석을 μœ„ν•΄ 이것을 우리 νŒ€μ˜ λ°± λ‘œκ·Έμ— μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 이 μŠ€λ ˆλ“œμ— λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

감사!

λ§ˆμŒμ„ λ‹΄μ•„,

Elmer

μ™„λ£Œ λ˜μ—ˆλ‚˜μš”? λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @sriharrsha ,

@kmcurry 의 μ œμ•ˆμ„ μ‹œλ„ν•΄

아직. μž‘λ™ μ—¬λΆ€λ₯Ό 곧 μ—…λ°μ΄νŠΈν•˜κ² μŠ΅λ‹ˆλ‹€.
λŠ¦μ€ λ‹΅λ³€ μ£„μ†‘ν•©λ‹ˆλ‹€.

λ‚˜ 같은 절망적 인 μ–΄μ œ λͺ¨λ‘μ—κ²Œ : V3 API에 μ‚¬μš©ν•  ν•„μš”κ°€ dynamic_template_data λŒ€μ‹  substitutions 이 아직 μ–΄λ”” λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€!

그런 λ‹€μŒ μ‚¬μš© {{var_name}} 이메일 ν…œν”Œλ¦Ώκ³Ό dynamic_template_data: { var_name: "var_value" } API의 ν˜ΈμΆœμ„.

@tkafka 였 마이 κ°“! 이 λ‚¨μž 덕뢄에 μ§€λ‚œ 이틀 λ™μ•ˆ 머리λ₯Ό 뽑아 μ£Όμ…¨μŠ΅λ‹ˆλ‹€.

@tkafka κ°μ‚¬ν•©λ‹ˆλ‹€! λ„ˆλ¬΄ λ‹΅λ‹΅ ν•΄μš”! λ‚΄ ν•˜λ£¨ 3 μ‹œκ°„ κ±Έλ Έμ–΄ ...

λˆ„κ΅°κ°€κ°€ 같은 것을 μ°ΎλŠ” κ²½μš°μ— λŒ€ν•œ 전체 μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');

var newMsg = {
      "from": {
       "name": "Your Company",
       "email": env.businessEmail
      },
      "personalizations": [{
       "to": order.email,
       "dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
      }],
      "subject": "test subject",
      "content": [{
        "type": "text/plain",
        "value": "Hello, {{firstName}}!"
       },
       {
        "type": "text/html",
        "value": "<html><p>Hello, {{'firstName}}!</html> "
       }],
       "template_id": env.sendgridOrderConfirmationTemplateId
    };
    console.log("Sending confirmation email...")
    return sendgrid.send(newMsg);

sendgrid의 λ¬Έμ„œλŠ” 아무리 λ”μ°ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„,

진행 상황은 이 문제 λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. μš°λ¦¬λŠ” ν˜„μž¬ C #, Java, 그리고이 SDK에 λŒ€ν•œ μ—…λ°μ΄νŠΈ μž‘μ—…μ„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ–‘ν•΄ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 지연에 λŒ€ν•΄ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

λ§ˆμŒμ„ λ‹΄μ•„,

Elmer

ν•˜, dynamic_template_data . λ‹Ήμ‹ μ˜ μž‘μ€ 퍼즐을 ν’€μ—ˆμŠ΅λ‹ˆλ‹€! :λ―Έμ†Œ:

λ‹€λ₯Έ 타이프 슀크립트 μ‚¬μš©μžμ˜ 경우- mail.d.ts 파일 생성 :

import {MailData} from "@sendgrid/helpers/classes/mail";

// see https://github.com/sendgrid/sendgrid-nodejs/issues/638

declare module "@sendgrid/helpers/classes/mail" {
    export interface MailData {
        dynamic_template_data: {[key: string]: string};
    }
}

@xduseko κ°μ‚¬ν•©λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰