* μ§μ μ§μ μ¬ν *
μ¦κ±° : https://support.sendgrid.com/hc/en-us/requests/1325416?page=1
λμκ΄μμ μ΄λ©μΌμ λ³΄λΌ μ μμ΅λλ€. μ§μμ΄ λλ₯Ό μ¬κΈ°λ‘ μλ΄νμ΅λλ€. localhostμμ μ€νλλ node.jsμμ 보λ΄λ €κ³ ν©λλ€. λ¨Όμ npmμ λμ΄λ μμ λ₯Ό μλνμ§λ§ x-no-cors reason
μ κ°μ ν€λλ‘ 401 μ€λ₯κ° λ°μν©λλ€. κ·Έλμ λμ @sendgrid/mail
ν¨ν€μ§λ₯Ό μ¬μ©νλ €κ³ νλλ° λ€μκ³Ό κ°μ μ€λ₯κ° λ°μν©λλ€.
TypeError: Cannot read property 'errors' of undefined
at ResponseError.toString (E:\songsplits\api\node_modules\@sendgrid\helpers\classes\response-error.js:45:27)
at Function.CapturedTrace.parseStackAndMessage (E:\songsplits\api\node_modules\bluebird\js\main\captured_trace.js:176:25)
at CapturedTrace.attachExtraTrace (E:\songsplits\api\node_modules\bluebird\js\main\captured_trace.js:79:32)
at Promise._attachExtraTrace (E:\songsplits\api\node_modules\bluebird\js\main\debuggability.js:102:19)
at Promise._rejectCallback (E:\songsplits\api\node_modules\bluebird\js\main\promise.js:471:10)
at E:\songsplits\api\node_modules\bluebird\js\main\promise.js:486:17
at Request.http [as _callback] (E:\songsplits\api\node_modules\@sendgrid\client\src\client.js:124:18)
at Request.self.callback (E:\songsplits\api\node_modules\request\request.js:188:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (E:\songsplits\api\node_modules\request\request.js:1171:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (E:\songsplits\api\node_modules\request\request.js:1091:12)
at IncomingMessage.g (events.js:291:16)
at emitNone (events.js:91:20)
μ¬κΈ°μ μ¬ν ν μ΅μ λͺ¨λμ΄ μμ΅λλ€.
email.js
const sgMail = require('@sendgrid/mail')
sgMail.setApiKey(process.env.SENDGRID_KEY);
module.exports.send = function send(html,subject,to,from){
return new Promise((resolve,reject)=>{
sgMail.send({
to,
from,
subject,
html
}).then(resolve).catch(reject);
});
};
index.js
const send = require('./mail');
send(
'<!DOCTYPE html><html><head><title>Hi</title></head><body>Hi</body></html>',
'Hi',
'[email protected]',
'[email protected]',
).then(()=>console.log('sent an email successfully!')).catch(err=>console.log(err));
λ€λ₯Έ ν€λ‘ μλνμ§λ§ λΆμλ Έλ μμ΅λλ€. λλ‘λ μ€λ₯κ° λ°μνμ§ μκ³ μλ΅μ΄
Unauthorized (401)
Permission denied, wrong credentials
μλ νμΈμ @ r3wt ,
μ΄λ Google μ§μν μ΄ λμΈ μμλ λ¬Έμ μ λλ€. κ·Έλ€μ κ·νμ κ³μ μ μ‘°μ¬νμ¬ κ·νμ ν€ λ¬Έμ λ₯Ό νμ νλ λ° λμμ μ€ μ μμ΅λλ€.
κ°μ¬ν©λλ€!
λ§μμ λ΄μ,
Elmer
@thinkingserious κ·νμ μ§μ νμ΄ μ λ₯Ό μ¬κΈ°λ‘ μΈλ ν μ¬λμ λλ€.
λΏ‘
API ν€λ₯Ό githubμ κ²μνλ©΄ κ·μ μ€μ νμ΄ ν€λ₯Ό λΉνμ±ν ν κ²μ΄κΈ° λλ¬Έμ μ΄λ° μΌμ΄ λ°μν μ μλ€λ κ²μ μκ³ μμ΅λλ€.
λ°μν μμλ λ λ€λ₯Έ μΌμ IP κ΄λ¦¬κ° μΌμ Έμλ κ²½μ°μ λλ€. μ¬κΈ°μ κ³μ μ νΉμ IPμμλ§ μ‘μΈμ€ ν μ μμ΅λλ€. ν΄λΉ λͺ©λ‘μμλ IPμμ μ½λκ° μ€νμ€μΈ κ²½μ°μλ μ€λ₯κ° λ°μν©λλ€.
λΆνμ λ€μ΄ μ£Όμκ³ λ©μΌ / 보λ΄κΈ° κΆνμΌλ‘ μ API ν€λ₯Ό λ§λ€κ³ μ½λλ₯Ό λ€μ μλν΄ μ£Όμκ² μ΅λκΉ?
κ·Έλ κ²νλ λμ μ§μ ν°μΌ λ²νΈλ₯Ό μλ €μ£Όμκ² μ΅λκΉ?
κ°μ¬!!
μ§κΈ ν°μΌμ΄ 보μ¬μ ... κ·Έλμ μ λ λ³Όκ²μ. κ°μ¬!
@mbernier ν€λ κ°μΈ μ μ₯μμ κ΅¬μ± νμΌμ μμ΅λλ€. λΉμ μ νμ μ΄κ²μ μ΄λ»κ² κ°μ§ ν μ μμ΅λκΉ? ν€ μ μΆμ μνμ΄ μμΌλ©° κ°μΈ μ μ₯μμ λλ€.
μ΄μ λ΄ μ°κ²°μ λν λͺ κ°μ§ μ 보 :
λ°λΌμ κ°μΈ μ 보λΌλ©΄ λ¬Έμ κ°λμ§ μμ΅λλ€. InfoSec νμ νμ κ°μΈ μ μ₯μμλ ν€λ₯Ό λ£μ§ λ§ κ²μ μ μν©λλ€. :)
μ±μμ μ΄λ©μΌμ λ³΄λΌ μ μμ΄μΌν©λλ€.
https://sendgrid.com/docs/API_Reference/api_v3.html λ‘ μ΄λνμ¬ ν΄λΉ λ¬Έμ νμ΄μ§μ "μ¬μ©ν΄λ³΄κΈ°"νμ ν΅ν΄ λ³΄λ΄ μ£Όμκ² μ΅λκΉ? μ€λ₯κ° λ€μ λ°μνλ©΄ μ¬κΈ°μ μλ΅ λ° μ€λ₯λ₯Ό κ²μνμμμ€.
λΏ‘λΏ‘
@mbernier λΆννλ node.jsμμ μ¬μ ν μ€λ₯κ° λ°μν©λλ€.
κ³μ μ΄ νμ±νλμ§ μμ κ² κ°μ΅λλ€. app.sendgrid.comμ λ‘κ·ΈμΈνμ¬ νμ΄μ§ μλ¨μ μλ¦Όμ μ°Ύμ μ£Όμκ² μ΅λκΉ? κ·Έκ²μ λΉμ μ΄ μ’μ λ°μ μμμ μ¦λͺ νκΈ° μν΄ λΉμ μμ μ λν μ 보λ₯Ό μ‘°κΈ λ μ 곡νλλ‘ μ§μ ν κ²μ λλ€.
@mbernier μ κ³ κ° κ³μ μ μ΅μ 2 λ λμ νμ±νλμμ΅λλ€. λ‘κ·Έλ₯Ό νμΈνλλ° ν΄λΌμ΄μΈνΈκ° λ€λ₯Έ μ΄λ©μΌ μΊ νμΈ λ±μ μ κ·Ήμ μΌλ‘ 보λ΄κ³ μμ΅λκΉ? νΌλ μ€λ¬μμ.
@mbernier λν ν κ³μ λ©λ΄μ μ€μ μ§μΉ¨μ λ°λμ λ μλνμ΅λλ€. λ무 κΈ°κ΄΄ν©λλ€.
μ£μ‘ν©λλ€. λ¬΄μ¨ μΌμ΄ μμλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μ§μ ν°μΌμ λ©λͺ¨λ₯Ό μμ± νμΌλ―λ‘ μ‘μΈμ€ κΆνμ ν΅ν΄ λ μμΈν μ 보λ₯Ό μ 곡 ν μ μκΈ°λ₯Ό λ°λλλ€.
μ§κΈ μλνκ³ μμ΄μ κΈ°μ©λλ€!
@ r3wt λλ μ΄κ²μ λ«μ κ²μ λλ€. λ€λ₯Έ λ¬Έμ κ° λ°μνλ©΄ μλ €μ£Όμμμ€!
@mbernier λ¬Έμ κ° λ€μ λ°μν©λλ€.
μλ νμΈμ @ r3wt ,
μ΄ μ€λ λμ μ°κ²° ν μλ μ§μ ν°μΌμ ν΅ν΄ μ§μνμ λ€μ μ°λ½ν΄ μ£Όμκ² μ΅λκΉ? κ·νμ κ³μ μ λ¬Έμ κ° λ°μνμ μ μμΌλ©° κ·νμ κ³μ μ μ‘°μ¬ ν μμλ λκ΅¬κ° μμ΅λλ€.
κ°μ¬!
λ§μμ λ΄μ,
Elmer
μλ € λ리면, μ κ° λ§ν μμλ ν λ§€μ° μ μ¬ν λ¬Έμ κ°μμμ΅λλ€ (μμ§ μλ‘μ΄ κ²μ
λλ€). ν΄κ²°μ±
μ μ± νλ«νΌ heroku https://devcenter.heroku.com/articles/sendgrid#setup -api-key-environment-variableμμ API ν€ λ³μλ₯Ό μ€μ νλ κ²μ΄ μμ΅λλ€.
μ§κΈμ λ¬Έμ μμ΅λλ€.