Sendgrid-nodejs: 동적 ν…œν”Œλ¦Ώ 지원 μΆ”κ°€

에 λ§Œλ“  2018λ…„ 07μ›” 24일  Β·  30μ½”λ©˜νŠΈ  Β·  좜처: sendgrid/sendgrid-nodejs

문제 μš”μ•½

2018λ…„ 7μ›” 24일에 우리 νŒ€μ€ νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ„ μœ„ν•œ 동적 μ½˜ν…μΈ λ₯Ό 곡개적으둜 μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€. 이제 메일 보내기 API v3λ₯Ό 톡해 λ³΄λ‚΄λŠ” λͺ¨λ“  고객이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Handlebars ꡬ문의 ν•˜μœ„ 집합에 λŒ€ν•œ κΈ°λ³Έ 지원 덕뢄에 λͺ©λ‘μ„ λ°˜λ³΅ν•˜κ³  쑰건문 등을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

μžμ„Έν•œ λ‚΄μš©μ€ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό 곡지 μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ 여기에 ν‘œμ‹œλœ λŒ€λ‘œ μš”μ²­ 본문을 μˆ˜λ™μœΌλ‘œ μƒμ„±ν•˜μ—¬ 이 κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이제 이 SDK에 λŒ€ν•œ λ„μš°λ―Έ μ½”λ“œ( μ™„λ£Œλ¨ )와 예제λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

ν—ˆμš© κΈ°μ€€

  • [[μ™„λ£Œ](https://github.com/sendgrid/sendgrid-nodejs/pull/691#issuecomment-407490342)] [λ ˆκ±°μ‹œ ν…œν”Œλ¦Ώκ³Ό μœ μ‚¬ν•œ λ„μš°λ―Έ κ΅¬ν˜„](https://github.com /sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md#transactional-templates)
  • USE_CASES.md 예제λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ λ„μš°λ―Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆ 동적 ν…œν”Œλ¦Ώ 을 보여주고 ν˜„μž¬ 예제의 이름을 Legacy 둜

선적 μ„œλ₯˜ λΉ„μΉ˜

medium docs update

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

λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•˜μ‹­μ‹œμ˜€. λŒ€μ²΄κ°€ v3 APIμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό νŒŒμ•…ν•˜λŠ” 데 ν•œ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.

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

λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•˜μ‹­μ‹œμ˜€. λŒ€μ²΄κ°€ v3 APIμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό νŒŒμ•…ν•˜λŠ” 데 ν•œ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.

@jharris-code의 ν˜•νŽΈμ—†λŠ” κ²½ν—˜μ— λŒ€ν•΄ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

μš°μ„  μˆœμœ„λ₯Ό 얻을 수 μžˆλ„λ‘ 이 λ¬Έμ œμ— κ·€ν•˜μ˜ νˆ¬ν‘œλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 우리 손에 PR #711이 있기 λ•Œλ¬Έμ— 곧 μ—…λ°μ΄νŠΈ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

λ¬Έμ„œμ˜ λΆ€μž¬κ°€ μ‹€μ œ μ½”λ“œμ˜ 릴리슀λ₯Ό μ°¨λ‹¨ν•œλ‹€λŠ” 것은 맀우 어리석은 μΌμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @catamphetamine μž…λ‹ˆλ‹€ .

μ½”λ“œλŠ” v6.3.1 μ—μ„œ λ¦΄λ¦¬μŠ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

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

μ—˜λ¨Έ

@thinkingserious 였,
λ‚˜λŠ” 그것을 μ‹œλ„ ν•  κ²ƒμž…λ‹ˆλ‹€, thx.

μ‚¬μš©μž μ°Έκ³  : μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώμ„ 톡과 dynamic_template_data λŒ€μ‹  substitutions .

이제 "substitutions:"λ₯Ό "dynamic_template_data:"둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

그리고 ν…œν”Œλ¦Ώμ€ ν•Έλ“€λ°”λ₯Ό μ‚¬μš©ν•˜μ—¬ 더 이상 "substitutionWrappers"λ₯Ό 지정할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

μ‚¬μš© μ‚¬λ‘€μ˜ 이 μ˜ˆλŠ” μ—¬μ „νžˆ dynamic_template_dataκ°€ μ•„λ‹Œ λŒ€μ²΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. Plz μ—…λ°μ΄νŠΈ, 이 μŠ€λ ˆλ“œλ₯Ό μ°ΎκΈ° 전에 SDKλ₯Ό μ‚¬μš©ν•˜κ³  κ²€μƒ‰ν•˜λŠ” 데 λͺ‡ μ‹œκ°„μ΄ κ±Έλ ΈμŠ΅λ‹ˆλ‹€. (λ˜ν•œ κ·€ν•˜μ˜ API λ¬Έμ„œ λŠ” 이것에 λŒ€ν•΄ 아무 것도 μ–ΈκΈ‰ν•˜μ§€ μ•Šμ•„ 도움이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
λ˜ν•œ replacementWrappersλŠ” dynamic_template_data와 μ „ν˜€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚΄ λ©”μ‹œμ§€ κ°œμ²΄μ— substitutionWrappers: ['*|', '|*'] ν‚€ κ°’ μŒμ„ ν¬ν•¨ν•˜λ”λΌλ„ μ€‘κ΄„ν˜Έλ‘œ 묢인 ν…œν”Œλ¦Ώ λ³€μˆ˜λ§Œ μ±„μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€. (이제 μ˜λ„μ μœΌλ‘œ λͺ¨λ“  μ‚¬λžŒμ΄ ν…œν”Œλ¦Ώμ— ν•Έλ“€λ°” ꡬ문을 μ‚¬μš©ν•˜λ„λ‘ κ°•μš”ν•˜λŠ” κ±΄κ°€μš”?)

@josh-yonomi μ£„μ†‘ν•©λ‹ˆλ‹€.

κ·€ν•˜μ˜ ν”Όλ“œλ°±μ„ 기반으둜 λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

μƒˆ ν…œν”Œλ¦Ώμ˜ 경우 ν•Έλ“€λ°” ꡬ문을 μ‚¬μš©ν•©λ‹ˆλ‹€. λ ˆκ±°μ‹œ ν…œν”Œλ¦Ώμ€ μ—¬μ „νžˆ ​​이전과 같이 μž‘λ™ν•©λ‹ˆλ‹€.

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

μ—˜λ¨Έ

이메일을 λ°›μ•˜μ§€λ§Œ λŒ€μ²΄κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 무엇이 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆκΉŒ?

const msg = {
    to: email,
    from: sendGridMail,
    templateId: emailTemplate.confirmationEmail,
    dynamic_template_data: {
      firstName: firstName,
      lastName: lastName,
      link: link
    }
  };

@thinkingseriousλ₯Ό 톡해 νŽΈμ§‘

λ¬Έμ œκ°€ 어디에 μžˆλŠ”μ§€ μ•Œλ €μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? κ°œμ„ ν•  수 μžˆλ„λ‘ 뢈만 사항을 μ΄ν•΄ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@drav96 ,

ν…œν”Œλ¦Ώμ΄ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ κ³΅μœ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

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

μ—˜λ¨Έ

μ™œ λŒ€μ²΄ λž˜νΌμ—μ„œ 특수 문자λ₯Ό μ œκ±°ν•©λ‹ˆκΉŒ ??

dynamic_template_data: {
      'foo-bar': 'wtf',
      'bar_baz': 'wtf',
      'baz.bro': 'wtf',
      'foo': 'wtf'
    }

{{foo}} μ΄λ©”μΌμ—μ„œ wtf λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

@larafale 은 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ ν™•μ‹€νžˆ 합리적이지 μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. 이 SDK의 μ†ŒμŠ€ μ½”λ“œλ₯Ό 보면 ν•΄λ‹Ή ν‚€κ°€ μˆ˜μ •λ˜λŠ” μœ„μΉ˜κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•΄ λ³„λ„μ˜ 문제λ₯Ό λ§Œλ“€κ³  HTML ν…œν”Œλ¦Ώμ˜ λͺ¨μ–‘을 ν¬ν•¨ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? μƒˆλ‘œμš΄ 문제λ₯Ό λ²„κ·Έλ‘œ ν‘œμ‹œν•˜κ³  ν•„μš”ν•œ 경우 μž¬ν˜„ 및 μˆ˜μ •ν•˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ‹­λ‹ˆκΉŒ,

κ·Έλž˜μ„œ 동적 ν…œν”Œλ¦Ώ 이메일을 보내렀고 ν•˜μ§€λ§Œ λŒ€μ²΄ λ˜λŠ” dynamic_template_data 을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λ‚΄ ν…œν”Œλ¦Ώμ—λŠ” {{fullname}} λ˜λŠ” {{date}} 와 같은 νƒœκ·Έκ°€ 있으며 μ΄λŸ¬ν•œ 속성은 send ν•¨μˆ˜λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

const msg = {
        to,
        from,
        templateId: template.id,
        dynamic_template_data: substitutions,
    };

    return sgMail.send(msg)

substitutions κ°œμ²΄μ— μ˜¬λ°”λ₯Έ 값이 μžˆλŠ” μ˜¬λ°”λ₯Έ 속성이 μžˆμ§€λ§Œ λŒ€μ²΄κ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ 뭘 잘λͺ»ν•˜κ³  μžˆλŠ”μ§€ μ•Œκ² μ–΄?

감사 ν•΄μš”.

@gianfelipe93
ꡬ쑰가 λ§žμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.
λ‚΄ μ†”λ£¨μ…˜μ€ λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œ @sendgrid νŒ¨ν‚€μ§€λ₯Ό μ œκ±°ν•˜κ³  λ‹€μ‹œ μ„€μΉ˜ν•˜λŠ” 것이 μ—ˆμŠ΅λ‹ˆλ‹€.
그것이 당신을 μœ„ν•΄ μž‘λ™ν•˜λŠ”μ§€ μ•Œλ €μ£Όμ‹­μ‹œμ˜€
const msg= { to: email, from: sendGridMail, templateId: emailTemplate.requestDemoEmail, dynamic_template_data: { name: data.name, email: data.email, } };

@drav96 κ³ λ§ˆμ›Œ 친ꡬ, μ§€κΈˆ μž‘λ™ μ€‘μž…λ‹ˆλ‹€.

이것에 또 ν•œ μ‹œκ°„μ„ ν—ˆλΉ„ν•œ 후에 λ‚΄κ°€ λ°”λΌλŠ” 것을 μΆ”κ°€ν•˜λŠ” 것은 ν™•μ‹€ν•œ λ¬Έμ„œ κ°€ 될 κ²ƒμž…λ‹ˆλ‹€. (λ¨Όμ € λ‚˜λ³΄λ‹€ λ¨Όμ € μ‹œκ°„μ„ ν—ˆλΉ„ν•œ λͺ¨λ“  μ΄λ“€μ—κ²Œ κ°μ‚¬ν•œλ‹€.)

  1. ν…œν”Œλ¦Ώ IDκ°€ d- 둜 μ‹œμž‘ν•˜λ©΄ substitutions 이 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° CAMEL-CASE dynamicTemplateData λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€( μ—¬κΈ° μ°Έμ‘°,
  2. ν…œν”Œλ¦Ώμ΄ d- 둜 μ‹œμž‘ν•˜λ©΄ setSubstitutionWrappers λŠ” μžλ™μœΌλ‘œ λ¬΄μ‹œλ˜λ©° ν…œν”Œλ¦Ώμ—μ„œ {{ 및 }} λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이것에 또 ν•œ μ‹œκ°„μ„ ν—ˆλΉ„ν•œ 후에 λ‚΄κ°€ λ°”λΌλŠ” 것을 μΆ”κ°€ν•˜λŠ” 것은 ν™•μ‹€ν•œ λ¬Έμ„œ κ°€ 될 κ²ƒμž…λ‹ˆλ‹€. (λ¨Όμ € λ‚˜λ³΄λ‹€ λ¨Όμ € μ‹œκ°„μ„ ν—ˆλΉ„ν•œ λͺ¨λ“  μ΄λ“€μ—κ²Œ κ°μ‚¬ν•œλ‹€.)

  1. ν…œν”Œλ¦Ώ IDκ°€ d- 둜 μ‹œμž‘ν•˜λ©΄ substitutions 이 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° CAMEL-CASE dynamicTemplateData λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€( μ—¬κΈ° μ°Έμ‘°,
  2. ν…œν”Œλ¦Ώμ΄ d- 둜 μ‹œμž‘ν•˜λ©΄ setSubstitutionWrappers λŠ” μžλ™μœΌλ‘œ λ¬΄μ‹œλ˜λ©° ν…œν”Œλ¦Ώμ—μ„œ {{ 및 }} λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” ν…œν”Œλ¦Ώ ID에 d- κ°€ μžˆλ”λΌλ„ dynamic_template_data 와 ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€.

예, μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€ 킀와 ν•¨κ»˜ μž‘λ™ν•˜μ§€λ§Œ κ°œλ°œμžκ°€ λ‚΄λΆ€μ μœΌλ‘œ 낙타 μΌ€μ΄μŠ€μ— μ»€λ°‹ν•œ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€(μœ„ λ³΄κ³ μ„œμ—μ„œ λ§ν¬ν•œ 쀄 μ°Έμ‘°). λ”°λΌμ„œ λͺ¨λ“  μƒˆ μ½”λ“œμ—λŠ” 낙타 μΌ€μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @kael-shipman

μ‹œκ°„μ„ λ‚΄μ–΄ λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

이 λ¬Έμ„œλ₯Ό λ³Έ 적이 μžˆμŠ΅λ‹ˆκΉŒ? 그렇지 μ•Šλ‹€λ©΄ ν•œ μ‹œκ°„μ„ λ‚­λΉ„ν•˜κ²Œ λ§Œλ“  발견 경둜λ₯Ό μ„€λͺ…ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? λ‹€μ‹œλŠ” 그런 일이 μΌμ–΄λ‚˜μ§€ μ•Šμ•˜μœΌλ©΄ ν•˜κ³  쒋지 μ•Šμ€ κ²½ν—˜μ— λŒ€ν•΄ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

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

μ—˜λ¨Έ

@thinkingserious ,

μ–΄μ¨Œλ“  λ¬Έμ œλŠ” μ˜¬λ°”λ₯Έ(ish) λ¬Έμ„œκ°€ μ–΄λ”˜κ°€μ— μ‘΄μž¬ν•œλ‹€λŠ” 것이 μ•„λ‹ˆλΌ λ§Žμ€ 였래된 λ¬Έμ„œκ°€ μ—¬μ „νžˆ Google 검색에 λ”°λΌμž‘ν˜€ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. "sendgrid ν…œν”Œλ¦Ώ ν•„λ“œ"(방금)λ₯Ό κ²€μƒ‰ν–ˆλŠ”λ° κ΄‘κ³ κ°€ μ•„λ‹Œ 첫 번째 κ²°κ³ΌλŠ” this μž…λ‹ˆλ‹€ . λͺ¨λ“  ν‘œμ‹œμ— λ”°λ₯΄λ©΄ 곡식 λ¬Έμ„œμ΄μ§€λ§Œ λΆ„λͺ…νžˆ 였래된 κ²ƒμž…λ‹ˆλ‹€. 뿐만 μ•„λ‹ˆλΌ 두 가지 λ‹€λ₯Έ λŒ€μ²΄ ν˜•μ‹( -firstName- 및 %firstName% )이 있으며 "μ‚¬μš©ν•˜λŠ” SDK λΌμ΄λΈŒλŸ¬λ¦¬μ— 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€"만 ν‘œμ‹œλ©λ‹ˆλ‹€. λͺ¨λ“  SDK λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ•„λ§ˆλ„ λ™μΌν•œ 단일 사원(ν•˜λ‚˜μ˜ λŒ€μ²΄ νƒœκ·Έ μŠ€νƒ€μΌλ§Œ 있음)을 가리킬 κ²ƒμž…λ‹ˆλ‹€.

sendgrid에 λŒ€ν•œ λ‚΄ κ²½ν—˜μ— λ”°λ₯΄λ©΄ κ΅¬μΆ•λœ 사항에 크게 κ°μ‚¬ν•˜μ§€λ§Œ 이 λ¬Έμ„œ ν˜Όλ™μ€ μ‹€μ œλ‘œ μ˜ˆμ™Έκ°€ μ•„λ‹ˆλΌ κ·œμΉ™μž…λ‹ˆλ‹€. λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„λ§ŒνΌ μ•žμœΌλ‘œ λ‚˜μ•„κ°€κ³  μžˆλ‹€λŠ” 것을 μ••λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  λ¬Έμ„œλ₯Ό μ •κ·œν™”ν•˜κ³  버전 번호λ₯Ό μ§€μ •ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 ν•œ 달 정도가 μ†Œμš”λ  κ²ƒμž…λ‹ˆλ‹€. μƒμœ„ Google 쑰회수

μ–΄μ¨Œλ“ , λ‹€μ‹œ ν•œ 번 κ°μ‚¬ν•©λ‹ˆλ‹€!

λ˜ν•œ λ§ν¬ν•œ λ¬Έμ„œμ—λŠ” μ—¬μ „νžˆ λ±€μ˜ 경우 dynamic_template_data λ˜μ–΄ 있으며, 그것이 λ§žλ‹€λ©΄ μ½”λ“œ μžμ²΄κ°€ μ™œ 그것을 camelCase둜 λ³€ν™˜ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ λ±€ μΌ€μ΄μŠ€κ°€ μž‘λ™ν•œλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μ½”λ“œκ°€ 주어지면 λ¬Έμ„œμ—μ„œ μ‚¬μš©μ„ ꢌμž₯ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @kael-shipman

μ‹œκ°„μ„ λ‚΄μ–΄ μžμ„Έν•œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

κ·€ν•˜κ°€ μ œκ³΅ν•œ 링크와 κ΄€λ ¨ν•˜μ—¬ ν•΄λ‹Ή λ¬Έμ„œλŠ” 이 SDKκ°€ μ§€μ›ν•˜λŠ” SendGrid v3 REST APIκ°€ μ•„λ‹ˆλΌ SendGrid SMTP APIλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. 즉, 당신은 그것을 μ•Œ κ²ƒμœΌλ‘œ κΈ°λŒ€ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 이 문제λ₯Ό λ¬Έμ„œ νŒ€μ— μ „λ‹¬ν•˜μ—¬ λͺ…ν™•ν•˜κ²Œ ν•  수 μžˆλŠ” 방법이 μžˆλŠ”μ§€ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ΅œκ·Όμ— μ˜€ν”ˆ μ†ŒμŠ€ λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•˜κ³ 

일관성을 μœ„ν•΄ camelCaseλ₯Ό μ‚¬μš©ν•˜λ„λ‘ READMEλ₯Ό μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. 그것을 ν¬μ°©ν•˜κ³  우리의 관심을 κ°€μ Έ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

λ‹€μ‹œ ν•œ 번 감사 λ“œλ¦¬λ©° μžμ„Έν•œ ν”Όλ“œλ°±μ— λŒ€ν•œ κ°μ‚¬μ˜ ν‘œμ‹œλ‘œ κ·€ν•˜μ—κ²Œ μ•½κ°„μ˜ μž₯식 을 μ œκ³΅ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 즐기닀!

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

μ—˜λ¨Έ

μ•ˆλ…•ν•˜μ„Έμš”, κ°μ‚¬ν•©λ‹ˆλ‹€ :D

2018λ…„ 9μ›” 18일 ν™”μš”μΌ μ˜€ν›„ 6:09 Elmer Thomas μ•Œλ¦Ό @github.com
썼닀:

μ•ˆλ…•ν•˜μ„Έμš” @kael-shipman https://github.com/kael-shipman ,

μ‹œκ°„μ„ λ‚΄μ–΄ μžμ„Έν•œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

κ·€ν•˜κ°€ μ œκ³΅ν•œ 링크와 κ΄€λ ¨ν•˜μ—¬ ν•΄λ‹Ή λ¬Έμ„œλŠ”
이 SDKμ—μ„œ μ‚¬μš©ν•˜λŠ” SendGrid v3 REST APIκ°€ μ•„λ‹Œ SendGrid SMTP API둜
μ§€μ›ν•©λ‹ˆλ‹€. 즉, 당신은 그것을 μ•Œ κ²ƒμœΌλ‘œ κΈ°λŒ€ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. λ‚΄κ°€ κ°€μ Έμ˜¬ 게
이 문제λ₯Ό λ¬Έμ„œ νŒ€μ—μ„œ ν™•μΈν•˜μ—¬
λͺ…ν™•νžˆ ν•˜λŠ” 방법.

μš°λ¦¬λŠ” μ΅œκ·Όμ— μ˜€ν”ˆ μ†ŒμŠ€ λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  λ‹€μ‹œ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.
https://sendgrid.com/blog/how-to-get-the-most-from-sendgrids-new-knowledge-center/ .
더 μ‰½κ²Œ 탐색할 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

일관성을 μœ„ν•΄ camelCaseλ₯Ό μ‚¬μš©ν•˜λ„λ‘ READMEλ₯Ό μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. 에 κ°μ‚¬ν•˜λ‹€
그것을 ν¬μ°©ν•˜κ³  우리의 주의λ₯Ό 끌고 μžˆμŠ΅λ‹ˆλ‹€!

λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦¬λ©° μžμ„Έν•œ λ‚΄μš©μ— λŒ€ν•œ κ°μ‚¬μ˜ ν‘œμ‹œλ‘œ
ν”Όλ“œλ°±, μš°λ¦¬λŠ” λ‹Ήμ‹ μ—κ²Œ μ•½κ°„μ˜ μž₯식을 μ œκ³΅ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€
https://dx.sendgrid.com/swag . 즐기닀!

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

μ—˜λ¨Έ

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ 확인
https://github.com/sendgrid/sendgrid-nodejs/issues/703#issuecomment-422588492 ,
λ˜λŠ” μŠ€λ ˆλ“œ μŒμ†Œκ±°
https://github.com/notifications/unsubscribe-auth/ADUIglZIH2d7imy-H7dekTo5A-v2Xau8ks5ucX0agaJpZM4Vev8b
.

일반 이메일 λ³€μˆ˜μ— λŒ€ν•΄ dynamic_template_data 을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μˆ˜μ‹ μžλ³„λ‘œ 동적 데이터도 μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ? 예: μ£Όλ¬Έ 번호, μ£Όλ¬Έ μˆ˜λŸ‰ λ“±. λ¬Έμ„œμ—μ„œ 이에 λŒ€ν•œ μ‚¬μš© 사둀λ₯Ό λ³Ό μˆ˜λŠ” μ—†μ§€λ§Œ κ°„κ³Όν•˜κ³  μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μ°Έκ³  : μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώμ„ 톡과 dynamic_template_data λŒ€μ‹  substitutions .

@catamphetamine λΆˆν–‰νžˆλ„ λͺ¨λ“  μ‚¬λžŒμ˜ μ½”λ“œκ°€ dynamicTemplateData 둜 μž‘λ™ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 이유λ₯Ό νŒŒμ•…ν•˜λŠ” 데 λ„ˆλ¬΄ λ§Žμ€ μ‹œκ°„μ„ λ³΄λƒˆκΈ° λ•Œλ¬Έμ— κ·€ν•˜μ˜ μ˜κ²¬μ„ λ°˜λŒ€ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 제 κ²½μš°μ—λŠ” λŒ€μ²΄κ°€ λ‹¨μˆœνžˆ μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 더 λ‚˜μ€ κ²½ν—˜μ„ ν•˜κΈ°λ₯Ό λ°”λž„ λΏμž…λ‹ˆλ‹€.

λ‚΄ 버전:
"@sendgrid/mail": "^6.3.1"

λ‚˜λ₯Ό μœ„ν•΄ λ‚˜λŠ” λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€ (μ‚¬λžŒλ“€μ΄ λ§ν•˜λŠ” 것과 λ°˜λŒ€).

// This seems to be the default, however, to avoid unexpected API changes,
// I'd rather set this manually
setSubstitutionWrappers("{{", "}}");

{
      subject: EMAIL_SUBJECT_ONBOARDING,
      templateId: "templateId",
      personalizations: [{
        to,
        // NOT WORKING WITH THIS ❌
        // dynamicTemplateData: {
        //   senderName: EMAIL_FROM_NAME,
        //   senderAddress: "an actual adress",
        // },

        // WORKS WITH THIS βœ…
        substitutions: {
            senderName: EMAIL_FROM_NAME,
            senderAddress: "an actual adress",
        },
    }],
}

@thinkingserious λŠ” 도ꡬλ₯Ό μ‚¬λž‘ν•©λ‹ˆλ‹€. λ¬Έμ„œ, 컀버 엣지 μΌ€μ΄μŠ€ 등을 계속 κ°œμ„ ν•΄ μ£Όμ„Έμš”. πŸŽ‰β€οΈ


μ—…λ°μ΄νŠΈ:

@catamphetamine downvote 덕뢄에. λ‚΄κ°€ setSubstitutionWrappers("{{", "}}"); ν–ˆκΈ° λ•Œλ¬Έμ— substitutions 일 수 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. μ•„μ•„, μ•„λ‹ˆ. 무슨 일이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² μ§€λ§Œ ν”Όκ³€ν•  μˆ˜λ„ μžˆμ§€λ§Œ dynamicTemplateData 은 μž‘λ™ ν•©λ‹ˆλ‹€. 참고둜 그것은 camelCase _(@kael-shipman 주석 μ°Έμ‘°)_ λŒ€λΆ€λΆ„μ˜ 예제 λ±€ 사둀λ₯Ό λ΄…λ‹ˆλ‹€. λ˜ν•œ sendgrid에 TS μœ ν˜•μ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ •μ˜μ— μ‚¬μš© κ°€λŠ₯ν•œ snake_case ν‚€κ°€ μ—†μŠ΅λ‹ˆλ‹€.


μ—…λ°μ΄νŠΈ 2:

μ‚¬μš© κ°€λŠ₯ν•œ μœ ν˜•μ— λŒ€ν•΄. PersonalizationJSON μœ ν˜•μ—μ„œ dynamic_template_data 을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ‚¬μš©ν•˜λŠ” 경우:
import { send } from "@sendgrid/mail";
그런 λ‹€μŒ send에 λŒ€ν•œ 첫 번째 λ§€κ°œλ³€μˆ˜λ₯Ό ν™•μΈν•œ ν›„ λ‹€μŒ μ •μ˜κ°€ μžˆλŠ” MailData λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

export interface MailData {
  // ...
  personalizations?: PersonalizationData[],
  // ...
}

그런 λ‹€μŒ λ‚˜λŠ” λ‹€μŒ 2가지 μœ ν˜•μ„ μš°μ—°νžˆ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

export interface PersonalizationData {
  // omitted keys...
  dynamicTemplateData?: { [key: string]: string; };
  customArgs?: { [key: string]: string };
  sendAt?: number;
}

export interface PersonalizationJSON {
  // same omitted keys...
  dynamic_template_data?: { [key: string]: string; };
  custom_args?: { [key: string]: string; };
  send_at?: number;
}

λ§ˆμ§€λ§‰μœΌλ‘œ λ‹€μŒκ³Ό 같이 μΌκ΄€λ˜κ²Œ μž‘λ™ν•˜λ„λ‘ dynamic_template_data λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

@thinkingserious λΆ„λͺ…νžˆ μˆ˜μ •ν•΄μ•Ό ν•  μœ ν˜• μ •μ˜ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜μ€‘μ— PR을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ² μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 쑰사해야 ν•©λ‹ˆλ‹€. 이제 dynamicTemplateData 도 substitutions λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‚˜λŠ” λ©ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈ:
일뢀 ν…Œμ΄λΈ”μ„ λ’€μ§‘μ—ˆμ§€λ§Œ μž‘λ™ν•˜κ³  이전 μ˜κ²¬μ„ μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ λ‹€μŒκ³Ό 같이 μΌκ΄€λ˜κ²Œ μž‘λ™ν•˜λ„λ‘ dynamic_template_data λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

이것은 μ €μ—κ²Œ μ€‘μš”ν•œ ν¬μΈνŠΈμ˜€μŠ΅λ‹ˆλ‹€. cc 이메일과 λ‹€λ₯Έ 거래 ν…œν”Œλ¦Ώμ˜ 제λͺ©μ„ μ„€μ •ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. μœ„μ™€ 같이 κ°œμΈν™” λ°°μ—΄ 내뢀에 dynamic_template_data 속성을 넣을 λ•Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

    const msg = {


         personalizations: [
            {
              to: req.body.to,
              dynamic_template_data : {
                subject: "Just to adsf...",
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            },
            {
              to: req.body.manager,
              dynamic_template_data : {
                subject: req.body.full_name_from + ' received a asdf asdf',
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            }
          ]
    };

λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ μ†”λ£¨μ…˜μ€ μ•„λž˜ ν‘œμ‹œλœ μ •ν™•ν•œ λ°©μ‹μœΌλ‘œ κ°œμΈν™” 개체 내뢀에 dynamic_template_dataλ₯Ό λ°°μΉ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

    "personalizations": [
        {
              "dynamic_template_data": {
            "fullname": "full Name",
            "useremail": ":[email protected]",
            "userphone": "56456",
            "usermsg": "tex fdsfgasdf t"
    },
            "to": [
                {
                    "email": "[email protected]"
                }
            ],
            "cc": [
                {
                    "email": "[email protected]"
                }
            ]
        }
]
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰