Sendgrid-nodejs: λŒ€μ²΄λŠ” λ¬Έμžμ—΄μ΄μ–΄μ•Όν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 400 잘λͺ»λœ μš”μ²­μ„ 보낼 λ•Œ

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

문제 μš”μ•½

ν…œν”Œλ¦Ώ + μ •μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” λŒ€μ²΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 이메일을 λ³΄λ‚΄λ €κ³ ν•˜λ©΄ μ„€λͺ…없이 400 잘λͺ»λœ μš”μ²­ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μž¬ν˜„ 단계

  1. λŒ€μ²΄λ‘œ ν…œν”Œλ¦Ώ λ§Œλ“€κΈ° (예 : %test% )
  2. λŒ€μ²΄κ°€ μ •μˆ˜μΈ sendgrid-nodeλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή ν…œν”Œλ¦Ώμ„ λ³΄λ‚΄λ €κ³ ν•©λ‹ˆλ‹€.

_ μ˜ˆμƒ _-이메일이 μ „μ†‘λ˜μ—ˆκ±°λ‚˜ λ¬Έμ œμ— λŒ€ν•œ 정보가 포함 된 였λ₯˜μž…λ‹ˆλ‹€.

_Actual_-λ¬Έμ œμ— λŒ€ν•œ μ„ΈλΆ€ μ‚¬ν•­μ΄μ—†λŠ” 400 잘λͺ»λœ μš”μ²­.

SENDMAIL ERROR { statusCode: 400,
  body: '{"errors":[{"message":"Bad Request","field":null,"help":null}]}',
  headers:
   { server: 'nginx',
     date: 'Wed, 31 Aug 2016 14:32:57 GMT',
     'content-type': 'application/json',
     'content-length': '63',
     connection: 'close',
     'x-frame-options': 'DENY' } }

λ‹€μŒμ€ μ½”λ“œ μ˜ˆμž…λ‹ˆλ‹€.

var mail = new helper.Mail()
mail.setFrom( new helper.Email( '[email protected]' ) )
mail.setTemplateId( "THE_TEMPLATE_ID" )

var personalization = new helper.Personalization()
personalization.addTo( new helper.Email( '[email protected]' ) )
var sub = new helper.Substitution( `%test%`, 42 )
personalization.addSubstitution( sub )
mail.addPersonalization( personalization )

sgClient.API( sgClient.emptyRequest( {
  method: 'POST',
  path: '/v3/mail/send',
  body: mail.toJSON()
} ) ).catch( function( err ) {
  console.error( 'SENDGRID ERROR', err.response )
} )

μ œμ™Έν•˜κ³  λ™μΌν•œ μ½”λ“œ '42' λŒ€μ‹  42 λŒ€μ²΄ μž‘ν’ˆ.

SendGrid μžμ²΄κ°€ 이와 같이 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ (λ˜λŠ” 였λ₯˜ λ©”μ‹œμ§€μ˜ 문제λ₯Ό μ„€λͺ…ν•˜λŠ” ν•„λ“œμ™€ 숫자이기 λ•Œλ¬Έμ— ν—ˆμš©λ˜μ§€ μ•Šμ€ 문제λ₯Ό μ„€λͺ…ν•˜λŠ” 경우) 맀우 μ’‹μ§€λ§Œ sendgrid-nodeλŠ” μ‰½κ²Œ ν•  수 /ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. toString ()-ing λŒ€μ²΄λ‘œ μ²˜λ¦¬ν•˜μ‹­μ‹œμ˜€.

PR을 μ œμΆœν•˜λŠ” 것은 κΈ°μ˜μ§€λ§Œ μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŸ¬ 갔을 λ•Œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” 방법에 λŒ€ν•œ λ¬Έμ„œκ°€ μ—†μœΌλ©° ν…ŒμŠ€νŠΈμ—μ„œ μ‹€ν–‰ν•˜μ§€ μ•Šμ•˜μ„ ν…ŒμŠ€νŠΈ ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ λ§Žμ€ λ‚΄μš©μ„ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

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

  • sendgrid-nodejs 버전 : 2.2.1
  • Node.js 버전 : 4.1.0
hacktoberfest help wanted community enhancement

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

@wizysanjay λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ— μ „λ‹¬ν•˜κΈ° 전에 λŒ€μ²΄ ν•­λͺ©μ— λŒ€ν•΄ toString λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )

이 μž‘μ—…μ„ μˆ˜ν–‰:

personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )

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

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

μžμ„Έν•œ ν”Όλ“œλ°±μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

μ΄λŠ” μ•Œλ €μ§„ 문제이며 API νŒ€μ€ μ μ ˆν•œ 였λ₯˜ λ¬Έμžμ—΄μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ λ°± 둜그λ₯Ό μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

λ§žμŠ΅λ‹ˆλ‹€. λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œμ΄ 문제λ₯Ό μˆ˜μ •ν•΄μ•Όν•˜λ©° ν’€ μš”μ²­μ„ μ’‹μ•„ν•©λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μž‘λ™ 방식을 μ•ˆλ‚΄ν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ¨Όμ € μ„œλͺ… 된 CLAκ°€ ν•„μš”ν•©λ‹ˆλ‹€ : https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md

감사!

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•©λ‹ˆκΉŒ?

감사

@wizysanjay λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ— μ „λ‹¬ν•˜κΈ° 전에 λŒ€μ²΄ ν•­λͺ©μ— λŒ€ν•΄ toString λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )

이 μž‘μ—…μ„ μˆ˜ν–‰:

personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )

+1

μ•Œμ•˜μ–΄. 감사

λ‚˜λŠ” 이것을 λ°œκ²¬ν•˜κΈ° 전에 μ˜€ν›„μ— 디버깅을 λ³΄λƒˆλ‹€λŠ” 것을 믿을 수 μ—†μŠ΅λ‹ˆλ‹€. 적어도 λ¬Έμ„œμ—μ„œ substitution must be string λ©˜μ…˜μ΄ 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€. μ œκ°€ 직접 μΆ”κ°€ν•˜κ³  μ‹Άμ§€λ§Œμ΄ μ‹œμ μ—μ„œ λ¬Έμ„œμ—μ„œ μ–΄λ””λ‘œ κ°ˆμ§€μ‘°μ°¨ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

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

:(이 μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λƒ‰κ°λ˜μ§€ 여기에 ,ν•˜μ§€λ§Œ μ‚¬μš© 사둀에 도움이 μ•„λ‹ˆμ—μš”.

μš°λ¦¬λŠ” 이것을 λΌμ΄λΈŒλŸ¬λ¦¬μ— ꡬ좕 ν•  κ²ƒμ΄λ―€λ‘œ κ±±μ •ν•  ν•„μš”λ„ μ—†μŠ΅λ‹ˆλ‹€. μš°μ„  μˆœμœ„λ₯Ό 높이기 μœ„ν•΄ κ·€ν•˜μ˜ νˆ¬ν‘œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ꡉμž₯ν•©λ‹ˆλ‹€. μš°μ„  μˆœμœ„κ°€ λ†’μ•„μ Έμ„œ κΈ°μ©λ‹ˆλ‹€. κ°„λ‹¨ν•œ μˆ˜μ •μ΄κ³  μ˜¬λ°”λ₯Έ λ°©ν–₯ (repo λ˜λŠ” file)을 μ•Œλ €μ€„ 수 μžˆλ‹€λ©΄ λ‚΄κ°€ 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€.

@dangerismycat ,

λŒ€λ°•! μˆ˜μ • 사항은 여기에 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

@thinkingserious 흠… λΉŒλ“œκ°€ μ‹€νŒ¨ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. μ—…λ°μ΄νŠΈν•΄μ•Ό ν•  κ΄€λ ¨ ν…ŒμŠ€νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ λ‹€λ₯Έ 것이 μžˆμŠ΅λ‹ˆκΉŒ?

SendGrid 쑰직에 μ†ν•˜μ§€ μ•ŠλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ Travis CI λΉŒλ“œμ— λ­”κ°€ 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μ§€λ§Œ λ‘œμ»¬μ—μ„œ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€.

"@ sendgrid / client": "^ 6.2.1"μ—μ„œ μ—¬μ „νžˆμ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.
subκ°€ μ •μˆ˜μΈ λ™μ•ˆ 이것을 λ³΄λ‚΄λŠ” 것은 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©°

body: {
  personalizations: [{
    to: [{
      email: userEmail
    }],
    subject: `blah blah blah`,
    substitutions: {
      '{{sub}}': sub
    }
  }],
  from: {
    email: '[email protected]',
    name: 'blah blah'
  },
  template_id
}
err { Error: Bad Request
    at Request.http [as _callback] (node_modules/@sendgrid/client/src/classes/client.js:124:25)
    at Request.self.callback (node_modules/request/request.js:186:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (node_modules/request/request.js:1163:10)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> (node_modules/request/request.js:1085:12)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1055:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)
  code: 400,
  message: 'Bad Request',
  response: 
   { headers: 
      { server: 'nginx',
        date: 'Fri, 20 Apr 2018 16:17:42 GMT',
        'content-type': 'application/json',
        'content-length': '63',
        connection: 'close',
        'access-control-allow-origin': 'https://sendgrid.api-docs.io',
        'access-control-allow-methods': 'POST',
        'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',
        'access-control-max-age': '600',
        'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html' },
     body: { errors: [Array] } } }
where the errors: array is [ { message: 'Bad Request', field: null, help: null } ]

κ·ΈλŸ¬λ‚˜ μš”μ²­μ˜ subλ₯Ό ${sub} 둜 λ³€κ²½ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사

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

μƒˆλ‘œμš΄ 호λ₯Ό μ—΄μ–΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? 감사!

이것은 버그 일 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ 그것을 ν›„λ“œ μ•„λž˜μ—μ„œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•΄μ•Όν•œλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€ .

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

Elmer

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