Lambda + SES 错误(InvalidParameterValue: Missing final '@domain')

0

【以下的问题经过翻译处理】 我收到一个500错误("message":"Failed to send email")。以下是在浏览器中显示的内容。

image image

这是我在网站上使用的 JS:

const submitBtn = document.getElementById('submit-btn'), //submit form button
  htmlForm = document.getElementById('contact-form'), //contact form
  endpoint = "https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Email"; //call lambda function

submitBtn.addEventListener('click', () => {
  const formData = new FormData(htmlForm), // capture form data
  urlEncodedData = new URLSearchParams(); // format data
  for (const pair of formData.entries()) {
	urlEncodedData.append(pair[0], pair[1]);
  }
  htmlForm.requestSubmit(); // only sends if form is valid
  fetch(endpoint, {
	method: "post",
	body: urlEncodedData,
	headers: {
	  "Content-Type": "application/x-www-form-urlencoded"
	}
  }).then(response => {
	if (response.ok) {
	  resetForm();
	  contactDialog.close();
	} else {
	  throw new Error('HTTP error. Status: ${response.status}');
	}
  }).catch(error => {
	console.log('Something is wrong *shrugs*');
  });
});

htmlForm.addEventListener('submit', (event) => {
  event.preventDefault(); // prevents submitting to self (page)
});

当前的 Lambda 代码:

const AWS = require('aws-sdk'),
  ses = new AWS.SES(),
  querystring = require('querystring');

exports.handler = async (event) => {
  const formData = querystring.parse(event.body),
        toAddress = formData.toAddress, 
        message = formData.message, 
        replyTo = formData.replyTo, 
        sourceEmail = formData.sourceEmail, 
        subject = formData.subject;

  // Construct the email message
  const emailParams = {
    Destination: {
      ToAddresses: [`${toAddress}`] 
    },
    Message: { 
      Subject: { 
        Data: `${subject}`
      },
      Body: { 
        Text: {
          Data: `${message}`
        }
      }
    },
    ReplyToAddresses: [`${replyTo}`], 
    Source: `${sourceEmail}`
  };

  // Send the email using SES
  try {
    await ses.sendEmail(emailParams).promise();
    return {
      statusCode: 200,
      body: JSON.stringify({ message: 'Email sent successfully' })
    };
  } catch (err) {
    console.log(err);
    return {
      statusCode: 500,
      body: JSON.stringify({ message: 'Failed to send email' })
    };
  }
};
profile picture
专家
已提问 5 个月前50 查看次数
1 回答
0

【以下的回答经过翻译处理】 在 Lambda 函数中对正文进行 Base64 编码解码就能解决这些问题。以 JSON 格式发送数据看起来是一种更有效的方法,但尝试这种方法也会遇到问题。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则