«В параметрах отсутствует обязательный ключ 'Source'» - PullRequest
0 голосов
/ 27 мая 2020

Это мой код:

const aws = require('aws-sdk')
const ses = new aws.SES()
// const myEmail = process.env.EMAIL
// const myDomain = process.env.DOMAIN
const getParamsFromUrl = require('./getParamsFromUrl')

module.exports = (options) => {
  const { myEmail, myDomain } = options

function generateResponse (code, payload) {
  return {
    statusCode: code,
    headers: {
      'Access-Control-Allow-Origin': myDomain,
      'Access-Control-Allow-Headers': 'x-requested-with',
      'Access-Control-Allow-Credentials': true
    },
    body: JSON.stringify(payload)
  }
}
function generateError (code, err) {
  console.log("hi"+ err)
  return {
    statusCode: code,
    headers: {
      'Access-Control-Allow-Origin': myDomain,
      'Access-Control-Allow-Headers': 'x-requested-with',
      'Access-Control-Allow-Credentials': true
    },
    body: JSON.stringify(err.message)
  }
}
function generateEmailParams (body) {
  const { email, name, content } = JSON.parse(body)
  console.log(email, name, content)
  if (!(email && name && content)) {
    throw new Error('Missing parameters! Make sure to add parameters \'email\', \'name\', \'content\'.')
  }
  return {
    Source: myEmail,
    Destination: { ToAddresses: [myEmail] },
    ReplyToAddresses: [email],
    Message: {
      Body: {
        Text: {
          Charset: 'UTF-8',
          Data: `Message sent from email ${email} by ${name} \nContent: ${content}`
        }
      },
      Subject: {
        Charset: 'UTF-8',
        Data: `You received a message from ${myDomain}!`
      }
    }
  }
}
async function sendJSON (event) {
    try {
      const emailParams = generateEmailParams(event.body)
      const data = await ses.sendEmail(emailParams).promise()
      return generateResponse(200, data)
    } catch (err) {
      return generateError(500, err)
    }
  }

return sendJSON

}

/////handler.js 


const options = {
  myEmail: process.env.EMAIL,
  myDomain: process.env.DOMAIN
}
const { sendJSON, sendFormEncoded } = require('./lambdaMailer')(options)
module.exports.sendJSON = sendJSON

Я определил значения для node_env и электронной почты в secrets.json файле. После запуска curl-ссылки я получаю сообщение об ошибке:

curl --header "Content-Type: application/json" --request POST --data "{\"source\":\"zyx@gmail.com\",\"destination\":\"abc@gmail.com\",\"name\":\"xyz\",\"subject\":\"Hey!\",\"message\":\"Hey!\"}" https://lyt7frokj4.execute-api.us-east-1.amazonaws.com/dev/email/send

"Missing required key 'Source' in params"

1 Ответ

0 голосов
/ 27 мая 2020

Думаю, это может быть проблема чувствительности к регистру . Согласно docs , должно быть Source, а не source:

Source: 'STRING_VALUE', /* required */
...