Sendgrid-nodejs: νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ„ μ „μ†‘ν•˜λ©΄ 데이터 개체λ₯Ό 톡해 μ§€μ •λœ μ£Όμ œκ°€ μ‚­μ œλ©λ‹ˆλ‹€.

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

문제 μš”μ•½

sendgridMail.send ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ„ 보낼 λ•Œ sendgridMail.send ( data.subject λ˜λŠ” data.personalizations[someIndex].subject λ₯Ό 톡해)λ₯Ό μ „λ‹¬ν•˜λŠ” data κ°œμ²΄μ— μΆ”κ°€λœ 제λͺ© 쀄 data.personalizations[someIndex].subject )λŠ” μ‚­μ œλ˜κ³  μ‹€μ œ νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ μžμ²΄μ— μ§€μ •λœ 제λͺ© 쀄이 μ‚¬μš©λ©λ‹ˆλ‹€.

λ‚΄κ°€ μ˜ˆμƒν•˜λŠ” λ™μž‘μ€ data κ°œμ²΄μ— μ§€μ •λœ ν•„λ“œκ°€ κΈ°μ‘΄ ν…œν”Œλ¦Ώ ν•„λ“œλ₯Ό μž¬μ •μ˜ν•˜μ§€λ§Œ 그렇지 μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. v3 Mail Send API에 λŒ€ν•œ λ¬Έμ„œλ₯Ό 보면 template_id ν•„λ“œμ˜ μ„€λͺ…에 λ‹€μŒκ³Ό 같이 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©ν•˜λ €λŠ” ν…œν”Œλ¦Ώμ˜ IDμž…λ‹ˆλ‹€. 제λͺ©κ³Ό λ‚΄μš©(ν…μŠ€νŠΈ λ˜λŠ” html)이 ν¬ν•¨λœ ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λŠ” 경우 κ°œμΈν™” λ˜λŠ” λ©”μ‹œμ§€ μˆ˜μ€€μ—μ„œ 지정할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜μ—κ²Œ "κ°œμΈν™”λ‚˜ λ©”μ‹œμ§€ μˆ˜μ€€μ—μ„œ 지정할 ν•„μš”κ°€ μ—†λ‹€"λŠ” 것은 ν…œν”Œλ¦Ώ 제λͺ©μ„ λ¬΄μ‹œν•  수 있음 을 수 μ—†μŠ΅λ‹ˆλ‹€ "둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

  • "λ‚΄ 이메일 제λͺ©"μ΄λΌλŠ” 제λͺ©μ˜ 거래 ν…œν”Œλ¦Ώμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  • data.subject λ₯Ό "[TEST] My Email Subject"둜 μ§€μ •ν•œ sendgridMail.send μ‚¬μš©ν•˜μ—¬ 이메일을 보내렀고 ν–ˆμŠ΅λ‹ˆλ‹€.
  • λ‚΄κ°€ 받은 μ΄λ©”μΌμ˜ 제λͺ©μ€ "λ‚΄ 이메일 제λͺ©"μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ²ˆμ‹ 단계

  1. μ£Όμ œκ°€ μ§€μ •λœ https://sendgrid.com μ—μ„œ νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ„ λ§Œλ“­λ‹ˆλ‹€.
  2. sendgridMail.send ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν…œν”Œλ¦Ώμ„ λ³΄λƒ…λ‹ˆλ‹€. λ˜ν•œ data.subject λ˜λŠ” data.personalizations[someIndex].subject λ₯Ό 지정해야 ν•©λ‹ˆλ‹€.
  3. API둜 μ „λ‹¬λœ 이메일이 μ•„λ‹Œ μ›λž˜ 제λͺ©μ΄ ν¬ν•¨λœ 이메일이 μˆ˜μ‹ λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

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

  • sendgrid-nodejs 버전: 6.3.1
  • Node.js 버전: v8.11.3
non-library issue

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

도! {{subject}}λ₯Ό μ„€μ •ν•΄μ•Ό ν•˜λŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒμ΄ 이 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 경우 ν…œν”Œλ¦Ώμ„ νŽΈμ§‘ν•˜κΈ° μœ„ν•΄ μ΄λ™ν•œ λ‹€μŒ μ™Όμͺ½μ—μ„œ "μ„€μ •"을 ν΄λ¦­ν•˜μ‹­μ‹œμ˜€. 주제λ₯Ό μž…λ ₯ν•  곡간이 μžˆμŠ΅λ‹ˆλ‹€. 여기에 {{제λͺ©}}을 μž…λ ₯ν•˜μ„Έμš”.

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

μ•ˆλ…•ν•˜μ„Έμš” @10kc-zackμž…λ‹ˆλ‹€.

λ‚˜λŠ” νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ—μ„œ 제λͺ©μ„ {{ subject }}둜 μ„€μ •ν•œ λ‹€μŒ μ½”λ“œμ—μ„œ data.subject λ₯Ό "[TEST] My Email Subject" μ„€μ •ν•œλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

그게 당신을 μœ„ν•΄ μž‘λ™ν•©λ‹ˆκΉŒ?

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

μ—˜λ¨Έ

@thinkingserious 와 κ·€ν•˜μ˜ μ œμ•ˆμ— λŒ€ν•œ 닡변에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

μ΄λ ‡κ²Œ ν•˜λ©΄ μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€λ§Œ(ν˜„μž¬ μ‚¬μš© 쀑인 ν•΄κ²° λ°©λ²•μž„) API 호좜 본문의 μΌλΆ€λ‘œ 주제λ₯Ό μ„€μ •ν•  수 μžˆλŠ” 것이 훨씬 더 μ’‹μŠ΅λ‹ˆλ‹€. API에 μ œκ³΅ν•œ μ£Όμ œκ°€ 폐기되고 API λ¬Έμ„œμ—μ„œ ν•΄λ‹Ή 정보가 λˆ„λ½λœ 것이 사싀인지 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” @10kc-zackμž…λ‹ˆλ‹€.

λ‚˜λŠ” νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ—μ„œ 제λͺ©μ„ {{ subject }}둜 μ„€μ •ν•œ λ‹€μŒ μ½”λ“œμ—μ„œ data.subject λ₯Ό "[TEST] My Email Subject" μ„€μ •ν•œλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

그게 당신을 μœ„ν•΄ μž‘λ™ν•©λ‹ˆκΉŒ?

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

μ—˜λ¨Έ

@10kc-zack이 이 ν•΄κ²° 방법이 μž‘λ™ν•œλ‹€κ³  λ°ν˜”μ§€λ§Œ ν…œν”Œλ¦Ώμ΄ ' μ•„ν¬μŠ€νŠΈλ‘œν”Όμ™€ 같은 일뢀 문자λ₯Ό λ³€ν™˜ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. 즉 "Someone's"λ₯Ό html μ—”ν„°ν‹°λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 제λͺ©μ΄ Someone's 이메일이 λ„μ°©ν–ˆμŠ΅λ‹ˆλ‹€.

SendMail Nuget νŒ¨ν‚€μ§€ 방법을 μ‚¬μš©ν•˜μ—¬ 제λͺ© 쀄을 μ„€μ •ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ 정보λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—…λ°μ΄νŠΈν•˜λ €κ³  μ‹œλ„ν•œ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    public async Task SendAsyncTemplate(string FromAddress, string FromName, string ToAddress, string ToName, string Subject, string LinkText, string LinkUrl)
    {
        _logger.LogInformation($"Sending mail to: {ToAddress}, with subject: {Subject}");

        var apiKey = _sendGridOptions.SendGridAPI;
        var client = new SendGridClient(apiKey);

        var from = new EmailAddress(FromAddress, FromName);
        var to = new EmailAddress(ToAddress, ToName);
        var msg = new SendGridMessage();
        var templateData = new ExampleTemplateData
        {
            Subject = Subject,
            Name = ToName,
            LinkText = LinkText,
            LinkUrl = LinkUrl
        };
        msg.Subject = "{{subject}}";
        msg.SetFrom(from);
        msg.AddTo(to);
        msg.AddCc(from);
        msg.SetTemplateId("supersecret");
        msg.SetTemplateData(templateData);

        var response = await client.SendEmailAsync(msg);

        _logger.LogInformation($"SendGrid Response Status Code: {response.StatusCode}");
    }
    private class ExampleTemplateData
    {
        [JsonProperty("subject")]
        public string Subject { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("linkText")]
        public string LinkText { get; set; }
        [JsonProperty("linkUrl")]
        public string LinkUrl { get; set; }
    }

디버깅 λͺ¨λ“œμ—μ„œ μ‹€ν–‰ν–ˆλŠ”λ° 값이 μ œλŒ€λ‘œ μ„€μ •λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 제λͺ© μ€„λ‘œ μ–»λŠ” 것은 ν•˜μ΄ν”ˆμž…λ‹ˆλ‹€. μ–΄λ–€ 아이디어?

도! {{subject}}λ₯Ό μ„€μ •ν•΄μ•Ό ν•˜λŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒμ΄ 이 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 경우 ν…œν”Œλ¦Ώμ„ νŽΈμ§‘ν•˜κΈ° μœ„ν•΄ μ΄λ™ν•œ λ‹€μŒ μ™Όμͺ½μ—μ„œ "μ„€μ •"을 ν΄λ¦­ν•˜μ‹­μ‹œμ˜€. 주제λ₯Ό μž…λ ₯ν•  곡간이 μžˆμŠ΅λ‹ˆλ‹€. 여기에 {{제λͺ©}}을 μž…λ ₯ν•˜μ„Έμš”.

@smschick ,

κ·€ν•˜μ˜ 경우 {{{ subject }}} ν•©λ‹ˆλ‹€.

@10kc-zack,

λ¬Έμ„œλ₯Ό λ³€κ²½ν•˜κΈ° μœ„ν•œ μš”μ²­μ΄ μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€κ³  κ°€μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ?

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

μ—˜λ¨Έ

@thinkingserious 그것은 μ‹€μ œλ‘œ λ‚΄κ°€ μ–ΈκΈ‰ν•œ λ¬Έμ„œμž…λ‹ˆλ‹€ :+1:

dynamic_template_data λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  APIλ₯Ό 톡해 주제λ₯Ό μ„€μ •ν•  수 μžˆλŠ” κ³„νš

@mou01 주제 μ„€μ • 방법에 λŒ€ν•œ κ°„λ‹¨ν•œ 예: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md

예, 동적 ν…œν”Œλ¦Ώ 데이터λ₯Ό μ‚¬μš©ν•  λ•Œ κ°œμΈν™”λ₯Ό 톡해 주제λ₯Ό 전달할 수 μ—†λ‹€λŠ” 것이 λ‹€μ†Œ ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. λ³΄μ΄λŠ” λ°μ΄ν„°λ‘œ 전달해야 ν•©λ‹ˆλ‹€.

@mou01 주제 μ„€μ • 방법에 λŒ€ν•œ κ°„λ‹¨ν•œ 예: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md

동적 ν…œν”Œλ¦Ώμ—μ„œ μž‘λ™ν•©λ‹ˆκΉŒ?

제 μƒκ°μ—λŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. 동적 ν…œν”Œλ¦Ώ 뒀에 μžˆλŠ” μ•„μ΄λ””μ–΄λŠ” ν…œν”Œλ¦Ώ μ„€μ •μ—μ„œ 주제λ₯Ό μ„€μ •ν•˜κ³  μ£Όμ œμ—μ„œ 동적 데이터λ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ ˆμΆ©μ μ€ μ™„μ „νžˆ μœ μ—°ν•˜κΈ°λ₯Ό μ›ν•œλ‹€λ©΄ 동적 λ°μ΄ν„°λ‘œ 전달해야 ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ μžˆλŠ” μ‚¬λžŒμ΄ μžˆλŠ” 경우:
ν…œν”Œλ¦ΏμœΌλ‘œ μ΄λ™ν•˜μ—¬ ν†±λ‹ˆλ°”ν€΄ μ•„μ΄μ½˜μ΄ μžˆλŠ” "μ„€μ •"을 ν΄λ¦­ν•˜κ³  이λ₯Ό 제λͺ© ν•„λ“œ {{subject}}
λ§ˆμ§€λ§‰μœΌλ‘œ νŽ˜μ΄λ‘œλ“œλ₯Ό 보낼 λ•Œ " dynamic_template_data "μ—λŠ” 제λͺ© 값이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
"dynamic_template_data":{ "subject": "My Subject Value here" }

λ¬Έμ„œ λ³€κ²½μœΌλ‘œ 이 문제λ₯Ό λ‹«λŠ” 것은 이 λ¦¬ν¬μ§€ν† λ¦¬μ—μ„œ μˆ˜μ •ν•  수 μžˆλŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. λ¬Έμ„œ νŒ€μ— μš”μ²­μ„ μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€(μ°Έμ‘° 제λͺ©: _메일 보내기 ν…œν”Œλ¦Ώ_ID μ„€λͺ… μ—…λ°μ΄νŠΈ). μ—…λ°μ΄νŠΈκ°€ 있으면 μ—¬κΈ°λ‘œ νšŒμ‹ ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ¬Έμ„œκ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@childish-sambino κ°μ‚¬ν•©λ‹ˆλ‹€

μ‚Όμ€‘κ΄„ν˜ΈλŠ” μ—¬μ „νžˆ μž‘λ™ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—¬μ „νžˆ 곡식 μ†”λ£¨μ…˜μž…λ‹ˆκΉŒ?
감사 ν•΄μš”!

image

@tcukanoot λ„€.

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