Отправитель электронной почты AWS Lambda nodejs - PullRequest
0 голосов
/ 20 декабря 2018

Я новичок в aws и пытаюсь отправить электронное письмо, используя lambda serverless service.Я нашел функцию отправителя электронной почты ses и развернул ее, но получаю ошибки.Эта первая часть кода (где возникает проблема):

    const AWS = require('aws-sdk'),
  SES = new AWS.SES(),
  processResponse = require('./process-response.js'),
  FROM_EMAIL = process.env.FROM_EMAIL,
  UTF8CHARSET = 'UTF-8';

exports.handler = (event) => {
  if (event.httpMethod === 'OPTIONS') {
    return Promise.resolve(processResponse(true));
  }

  if (!event.body) {
    return Promise.resolve(processResponse(true, 'Please specify email parameters: toEmails, subject, and message Wywala pierwsze ', 400));
  }
  const emailData = JSON.parse(event.body);

  if (!emailData.toEmails || !emailData.subject || !emailData.message) {
    return Promise.resolve(processResponse(true, 'Please specify email parameters: toEmails, subject and message', 400));
  }

  const destination = {
    ToAddresses: emailData.toEmails
  }

  if (emailData.ccEmails) {
    destination.CcAddresses = emailData.ccEmails;
  }

  const body = (emailData.message && isHTML(emailData.message)) ?
    { Html: { Charset: UTF8CHARSET, Data: emailData.message } } :
    { Text: { Charset: UTF8CHARSET, Data: emailData.message } };

  const emailParams = {
    Destination: destination,
    Message: {
      Body: body,
      Subject: {
        Charset: UTF8CHARSET,
        Data: emailData.subject
      }
    },
    Source: FROM_EMAIL
  };

  if (emailData.replyToEmails && Array.isArray(emailData.replyToEmails)) {
    emailParams.ReplyToAddresses = emailData.replyToEmails;
  }

  return SES.sendEmail(emailParams).promise()
    .then(() => (processResponse(true)))
    .catch(err => {
      console.error(err, err.stack);
      const errorResponse = `Error: Execution update, caused a SES error, please look at your logs.`;
      return processResponse(true, errorResponse, 500);
    });
};

function isHTML(value) {
  value = value.trim();
  return value.startsWith('<') && value.endsWith('>') &&
    (value.includes('<body') || value.includes('<div') || value.includes('<s') || value.includes('<h') || value.includes('<p'));
}
    }

Вот так выглядит мой почтовый запрос:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"message":"messageexample", "subject":"sbujectexample", "toEmails":"myemail@gmail.com"}' https://mypath.execute-api.eu-west-1.amazonaws.com/Prod/send

и в curl я получаю эту ошибку:

curl: (3) Port number ended with 't'
curl: (3) [globbing] unmatched close brace/bracket in column 35
{"message": "Internal server error"}

Я также пытался отправить его через приложение Postman, но оно тоже не работает.

Что я делаю не так?

Это мой процесс-ответ.js:

module.exports = (isCors, body, statusCode) => {
  const status = statusCode || (body ? 200 : 204);
  const headers = { 'Content-Type': 'application/json' };
  if (isCors) {
    Object.assign(headers, {
      'Access-Control-Allow-Headers': 'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token',
      'Access-Control-Allow-Methods': 'OPTIONS,POST',
      'Access-Control-Allow-Origin': process.env.CORS_ORIGIN,
      'Access-Control-Max-Age': '86400'
    });
  }
  return {
    statusCode: status,
    body: JSON.stringify(body) || '',
    headers: headers
  };
};

1 Ответ

0 голосов
/ 21 декабря 2018

Как насчет escaping double quote внутри вашего cURL.Обычно такие ошибки должны возникать из-за того, что double quote нарушает вашу кодировку.

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{\"message\":\"messageexample\", \"subjec\t":\"sbujectexample\", \"toEmails\":\"myemail@gmail.com\"}' https://mypath.execute-api.eu-west-1.amazonaws.com/Prod/send
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...