Sendgrid-nodejs: 동적 ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λŠ” 경우 μ£Όμ œκ°€ μ„€μ •λ˜μ§€ μ•ŠμŒ

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

동적 ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜μ—¬ 이메일 제λͺ©μ„ μΆ”κ°€ν•˜λ €κ³ ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이미 μ•Œλ €μ§„ λ²„κ·Έμž…λ‹ˆκΉŒ? 이 λ¬Έμ œμ— λŒ€ν•œ ν•΄κ²° 방법을 μ œμ•ˆ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

ν…œν”Œλ¦Ώ μ½”λ“œ :

<html>
<head>
  <title></title>
</head>
<body>
  <p> Hello <span>{{test_name}}!</span></p>
</body>
</html>

메일 보내기 κΈ°λŠ₯ :

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(settings.sendgrid.api_key);
sgMail.setSubstitutionWrappers('{{', '}}');

const msg = {
    to: '[email protected]',
    from: settings.sendgrid.from,
    subject: 'Test Subject',
    templateId: settings.sendgrid.template_id,
    dynamic_template_data: {
    test_name: 'Testing Name'
    },
};

sgMail.send(msg);
question

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

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

제λͺ© μ˜μ—­μ΄ UIμ—μ„œ λ‹€μŒκ³Ό 같이 λ³΄μž…λ‹ˆκΉŒ?

screen shot 2019-01-24 at 1 30 06 pm

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

Elmer

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

# 834와 동일

@ 10kc-zack μ•Œκ² μŠ΅λ‹ˆλ‹€. 이것은 μ•Œλ €μ§„ λ¬Έμ œμž…λ‹ˆλ‹€.

그런데이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 쑰치λ₯Ό μ·¨ν–ˆμŠ΅λ‹ˆκΉŒ?

@ nyel-dev SendGrid μ›Ή μ‚¬μ΄νŠΈμ—μ„œ ν…œν”Œλ¦Ώμ˜ 주제λ₯Ό μ„€μ •ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€. λ¬Έμ œλŠ” SendGrid의 APIκ°€ 동적 ν…œν”Œλ¦Ώμ„ 트리거 ν•  λ•Œ ν…œν”Œλ¦Ώμ„ μ œκ³΅ν•˜λ„λ‘ ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @ nyel-dev,

거래 ν…œν”Œλ¦Ώμ—μ„œλŠ” 주제λ₯Ό {{subject}}둜 μ„€μ • ν•œ λ‹€μŒ μ½”λ“œμ—μ„œ data.subject 을 "[TEST] My Email Subject" .

그게 λ‹Ήμ‹ μ—κ²Œ νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

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

Elmer

μ•ˆλ…•ν•˜μ„Έμš” @thinkingserious , 좔가적인 톡찰λ ₯이 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

λ ˆκ±°μ‹œ ν…œν”Œλ¦Ώμ—μ„œ νŠΈλžœμž­μ…˜ ν…œν”Œλ¦ΏμœΌλ‘œ μ „ν™˜ 쀑이며 νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ 제λͺ© ν•„λ“œλ₯Ό {{subject}} 둜 λ°”κΎΌ 후에도 λ™μΌν•œ 문제 (sendgrid-nodejs v6.3.1, Node : v8.11.4)κ°€ λ°œμƒν•©λ‹ˆλ‹€. setSubstitutionWrappers() λ₯Ό 톡해 λŒ€μ²΄ 래퍼λ₯Ό λͺ…μ‹œ 적으둜 μ„€μ •ν•˜μ§€ μ•Šμ•˜κ³  κΈ°λ³Έ ν•Έλ“€ λ°” μ„ΈνŠΈλ‘œ λŒμ•„κ°”μŠ΅λ‹ˆλ‹€ (ν…ŒμŠ€νŠΈ 쀑에 섀정을 μ‹œλ„ν–ˆμ§€λ§Œ).

첫 번째 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œλŠ” msg.dynamic_template_data.subject subject 속성 (λ”°μ˜΄ν‘œ λ˜λŠ” 특수 문자 μ—†μŒ)을 msg.subject 둜, 두 번째 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œλŠ” msg.dynamic_template_data.subject 둜 μ „λ‹¬ν•˜κ³  μ„Έ 번째 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄ μ„€μ •ν–ˆμ§€λ§Œ μˆ˜μ‹  된 κ²°κ³Ό μ΄λ©”μΌμ—λŠ” μ˜ˆμƒλŒ€λ‘œ 제λͺ©μ΄ λ°”λ€Œμ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이메일 제λͺ©μ—λŠ” "(제λͺ© μ—†μŒ)"이 ν‘œμ‹œλ©λ‹ˆλ‹€.

미리보기 λͺ¨λ“œμ—μ„œ sendgrid μ‚¬μ΄νŠΈμ—μ„œ ν…œν”Œλ¦Ώ 자체λ₯Ό ν…ŒμŠ€νŠΈν•˜κ³  ν…ŒμŠ€νŠΈ 데이터λ₯Ό μ„€μ •ν•˜λ©΄ μ˜ˆμƒλŒ€λ‘œ ν…μŠ€νŠΈκ°€ λŒ€μ²΄λ©λ‹ˆλ‹€.

μ–΄λ–€ 도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. 감사!

* νŽΈμ§‘ν•˜λ‹€ *
λ˜ν•œ λ©”μ‹œμ§€ 본문의 λŒ€μ²΄λŠ” 제λͺ© 쀄이 μ•„λ‹ˆλΌ μ˜ˆμƒλŒ€λ‘œ λŒ€μ²΄λœλ‹€λŠ” 점도 μ–ΈκΈ‰ν•΄μ•Όν•©λ‹ˆλ‹€.

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

여기에 μ™„μ „ν•œ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€. 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

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

Elmer

@thinkingserious 제λͺ©μ΄ μ˜ˆμ™€ λ™μΌν•œ 이메일에 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

to: "[email protected]",
  from: "[email protected]",
  subject: "Hello world",
  text: "Hello plain world!",
  html: "<p>Hello HTML world!</p>",
  templateId: "d-xxxx",
  dynamic_template_data: {
    subject: "Testing Templates & Stuff",
    name: 'Some "Testing" One',
    city: "<b>Denver<b>"
  }

image

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

여기에 μ™„μ „ν•œ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€. 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

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

Elmer

@thinkingserious : λΆˆν–‰νžˆλ„ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. @nicholasess와 λ§ˆμ°¬κ°€μ§€λ‘œ 전솑 / μˆ˜μ‹  된 이메일에 μ—¬μ „νžˆ λˆ„λ½ 된 제λͺ© 쀄이 ν‘œμ‹œλ©λ‹ˆλ‹€.

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

제λͺ© μ˜μ—­μ΄ UIμ—μ„œ λ‹€μŒκ³Ό 같이 λ³΄μž…λ‹ˆκΉŒ?

screen shot 2019-01-24 at 1 30 06 pm

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

Elmer

그런데 Sendgrid ν…œν”Œλ¦Ώ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ Set Subjectλ₯Ό μ‚¬μš©ν•˜μ—¬μ΄ 문제λ₯Ό ν•΄κ²°ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ @thinkingserious

섀정은 μ½”λ“œ, ν…ŒμŠ€νŠΈ 데이터와 같은 λ©”λ‰΄λ‘œ λ³€κ²½ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
image

μ„€μ •μ΄μžˆλŠ” 곳은 숨겨져 μžˆμŠ΅λ‹ˆλ‹€.

@nicholasess ν”Όλ“œλ°±μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! λ””μžμΈ νŒ€μ— μ „λ‹¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬μ΄ ν•΄κ²° 방법에 μ˜μ‘΄ν•΄μ•Όν–ˆμ§€λ§Œ 문제λ₯Ό μ‚΄νŽ΄ 보지 μ•Šκ³ λŠ” μž‘λ™ν•˜μ§€ μ•Šμ•˜μ„ κ²ƒμž…λ‹ˆλ‹€.

λ¬Έμ„œκ°€ API ν˜ΈμΆœμ—μ„œ 제λͺ©μ„ μ„€μ •ν–ˆλ‹€κ³  λ§ν–ˆλ“―μ΄ 이것은 맀우 직관적이지 μ•ŠμŠ΅λ‹ˆλ‹€ (그리고 λ©”μ‹œμ§€μ— λŒ€ν•΄ μ „μ²΄μ μœΌλ‘œ 제λͺ©μ„ μ„€μ •ν•˜κ³  κ°œμΈν™”μ—μ„œ μž¬μ •μ˜ ν•  μˆ˜μžˆλŠ” 방법을 μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.이 ν•΄κ²° λ°©λ²•μœΌλ‘œλŠ” λΆ„λͺ…νžˆ μ†μ‹€λ©λ‹ˆλ‹€).

λ˜ν•œ "API ν˜ΈμΆœμ—μ„œ μž¬μ •μ˜ ν•  수 μžˆλŠ” κ΄€λ¦¬μž νŽ˜μ΄μ§€μ— μ„€μ •λœ κΈ°λ³Έ 제λͺ©"κΈ°λŠ₯도 μ†μ‹€λ©λ‹ˆλ‹€. μ•„λ‹ˆμš”, ν•΄κ²° λ°©λ²•μœΌλ‘œ 영ν–₯μ„λ°›λŠ” ν…œν”Œλ¦Ώμ— λŒ€ν•œ 제λͺ©μ„ 항상 μ§€μ •ν•΄μ•Όν•©λ‹ˆλ‹€.

({{}} λ³΄κ°„μ—μ„œ 기본값을 μ„€μ •ν•˜λŠ” λ°©λ²•μ΄μ—†λŠ” ν•œ. λ¬Έμ„œλ₯Ό 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ 찾은 λ‚΄μš©μ€ λŒ€μ‹œλ₯Ό μ‚¬μš©ν•œ 보간 방법에 κ΄€ν•œ 것인데, μ™„μ „νžˆ μ΅μˆ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

μ•ˆλ…•ν•˜μ„Έμš”.

이 λ¬Έμ œκ°€ μ’…κ²° 된 μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? κ³ μ •λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄μƒν•˜κ²Œ 보일 μˆ˜λ„ μžˆμ§€λ§Œ μ‚¬λžŒλ“€μ€ λ™μΌν•œ ν™”λ©΄μœΌλ‘œ μ°½μ΄λ‚˜ 탭을 열지 μ•Šμ•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. Sendgrid UIμ—λŠ” 이전에 μ €μž₯ ν•œ λͺ¨λ“  데이터λ₯Ό λ‹€μ‹œ μ“Έ μˆ˜μžˆλŠ” μžλ™ μ €μž₯ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.

주제 {{subject}}μ—μ„œ μ‚¬μš©

λ‹€λ₯Έ λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ³€μˆ˜λ‘œ λ³΄λ‚΄μ‹­μ‹œμ˜€.

이런 μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ¬Έμ„œλ₯Ό λ”°λ₯΄κ³  λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν–ˆλ‹€κ³  μƒκ°ν–ˆκΈ° λ•Œλ¬Έμ—μ΄ λ¬Έμ œμ— λ„ˆλ¬΄ 였래 λΆ™μ–΄μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ ˆκ±°μ‹œ ν…œν”Œλ¦Ώμ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ° λ•Œλ¬Έμ— APIκ°€ λ™μΌν•˜κ²Œ μœ μ§€ 될 것이라고 μƒκ°ν–ˆκ³  κ°‘μžκΈ° μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것을보고 λ†€λžμŠ΅λ‹ˆλ‹€.

이 λ³€κ²½ 사항을 μ˜¬λ°”λ₯΄κ²Œ λ°˜μ˜ν•˜κΈ° μœ„ν•΄ λ¬Έμ„œλ₯Ό v3/mail/send 둜 μ—…λ°μ΄νŠΈ ν•  κ³„νšμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

이 문제λ₯Ό ν•΄κ²°ν•  μˆ˜μžˆλŠ” μœ μΌν•œ 방법은 _triple-stash_λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

{{{ subject }}}

이 기사에 λ”°λ₯΄λ©΄ https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/transactional-templates.md

제λͺ© ν•„λ“œμ— 이쀑 μ€‘κ΄„ν˜Έ λŒ€μ‹  νŠΈλ¦¬ν”Œμ„ μ‚¬μš©ν•˜μ—¬ 확인할 수 있음

제λͺ© 쀄에 νŠΈλ¦¬ν”Œ 곱슬 λ˜λŠ” λ‹€λ₯Έ μ½”λ“œλ₯Ό μ €μž₯ν•  λ•Œλ§ˆλ‹€ μ½”λ“œλŠ” λͺ‡ λΆ„ 후에 μžλ™μœΌλ‘œ ν‘œμ€€ <% subject %>둜 λ˜λŒμ•„κ°‘λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒλ„ 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€λ₯Έ μ‚¬λžŒλ„ 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” 두 개의 창문을 μ—΄μ—ˆμ„ λ•Œ 이와 같은 것을 λ³΄μ•˜λ‹€. SendGridλŠ” μžλ™ μ €μž₯λ˜λ―€λ‘œ 두 개의 창이 μ—΄λ € 있으면 μ„œλ‘œ μ·¨μ†Œλ©λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ 방식 :

SendGrid UI의 제λͺ© ν•„λ“œμ—μ„œ μ‚¬μš© : {{{subject}}}

보내 "subject": "test" μ—μ„œ message.dynamic_template_data

μ œμ•ˆ : μ—¬λŸ¬λΆ„μ€ μ •λ§λ‘œ λ¬Έμ„œ μž‘μ—…μ„ν•΄μ•Όν•©λ‹ˆλ‹€. 제 말은 그듀이 λ„ˆλ¬΄ 흩어져 있고 쑰각듀이 κ΅¬μ‹μ΄λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

νŠΈλ¦¬ν”Œ κ΄„ν˜ΈλŠ” μ—¬μ „νžˆ μž‘λ™ν•˜κ³  있으며 이것이 μ—¬μ „νžˆ 곡식적인 해결책인지 ν™•μΈν•˜λŠ” μ€‘μž…λ‹ˆλ‹€.

감사!

image

@tcukanoot 예.

λ‹€μ‹œ μ—΄μ–΄μ£Όμ„Έμš”! μš”μ²­μ˜ μ΅œμƒμœ„ λ ˆλ²¨μ— subject 을 μ„€μ •ν•˜λ„λ‘ μ œμ•ˆν•˜λŠ” λ¬Έμ„œκ°€ μ—¬μ „νžˆ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ dynamic_template_data ν¬ν•¨λ˜μ–΄μ•Όν•˜λ©° ν…œν”Œλ¦Ώμ˜ 제λͺ©μ€ {{subject}} λ˜λŠ” 기타 동적 ν‚€λ‘œ μ„€μ •λ˜μ–΄μ•Όν•©λ‹ˆλ‹€. 이것은 2018 λ…„λΆ€ν„° μ—΄λ € 있으며 이후에 λ„μž… 된 λ¬Έμ„œμ˜ λ³€κ²½ 사항이 μ—†μŠ΅λ‹ˆλ‹€!

λŒ€μ²΄ λ˜λŠ” dynamic_template_dataλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ μ„œλ²„μ—μ„œ 400 μš”μ²­ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

λ¬Έμ„œλ₯Ό μˆ˜μ •ν•˜μ„Έμš”. dynamic_template_dateλŠ” https://github.com/sendgrid/sendgrid-python/blob/main/use_cases/kitchen_sink.md 및 v3 λ¬Έμ„œλ₯Ό 기반으둜 μœ νš¨ν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ μ‚¬λžŒλ“€μ€ 그것이 κ·Έλ“€μ—κ²Œ νš¨κ³Όκ°€ μžˆλ‹€κ³ λ³΄κ³ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

무슨 일이야? πŸ€”

λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ 방식 :

SendGrid UI의 제λͺ© ν•„λ“œμ—μ„œ μ‚¬μš© : {{{subject}}}

보내 "subject": "test" μ—μ„œ message.dynamic_template_data

μ œμ•ˆ : μ—¬λŸ¬λΆ„μ€ μ •λ§λ‘œ λ¬Έμ„œ μž‘μ—…μ„ν•΄μ•Όν•©λ‹ˆλ‹€. 제 말은 그듀이 λ„ˆλ¬΄ 흩어져 있고 쑰각듀이 κ΅¬μ‹μ΄λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

PHPμ—μ„œ μˆ˜ν–‰ν•˜λŠ” 방법. μ½”λ“œλ₯Ό 곡유 ν•΄μ£Όμ„Έμš”!

제λͺ©μ΄ μ΅œμƒμœ„ 맀개 λ³€μˆ˜λ‘œ μ „μ†‘λ˜λ„λ‘ μ œμ•ˆν•˜λŠ” λ¬Έμ„œκ°€ ν˜„μž¬ 잘λͺ»λœ κ²ƒμž…λ‹ˆκΉŒ?

λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ 방식 :

SendGrid UI의 제λͺ© ν•„λ“œμ—μ„œ μ‚¬μš© : {{{subject}}}

보내 "subject": "test" μ—μ„œ message.dynamic_template_data

μ œμ•ˆ : μ—¬λŸ¬λΆ„μ€ μ •λ§λ‘œ λ¬Έμ„œ μž‘μ—…μ„ν•΄μ•Όν•©λ‹ˆλ‹€. 제 말은 그듀이 λ„ˆλ¬΄ 흩어져 있고 쑰각듀이 κ΅¬μ‹μ΄λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

이것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€! λ¬Έμ„œλŠ” λ‹€μŒκ³Ό κ°™μ•„μ•Όν•©λ‹ˆλ‹€.

const msg = {
    to: toEmail,
    from: "email",
    templateId: "tempateId",
    dynamic_template_data: {
      subject: "subjectHere",
    },
  };

sendGridEmail
    .send(msg)
    .then(() => console.log("email sent"))
    .catch((error) => console.error(error.toString()))
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
1 / 5 - 1 λ“±κΈ‰