未发送电子邮件/没有错误 AWS/SES

我有一个 AWS Lambda 函数:

发送电子邮件.js

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

function sendEmail(subject, message, senderEmail) {
  const params = {
    Destination: {
        ToAddresses: [
            process.env.VERIFIED_EMAIL
        ]
      },
    Message: {
        Body: {
            Text: {
                Data: message,
                Charset: 'UTF-8'
            }
        },
        Subject: {
            Data: subject,
            Charset: 'UTF-8'
        }
    },
    Source: process.env.VERIFIED_EMAIL,
    ReplyToAddresses: [senderEmail]
  }
  return ses.sendEmail(params).promise();
}

module.exports = sendEmail;

调用自

index.js

const sendEmail = require('./sendEmail');
exports.handler = async (event, context) => {
    return sendEmail(event.subject, event.message, event.email).then((response) => { context.done(null, 'Email sent')});

};

我有环境。变量 VERIFIED_EMAIL 设置为由 AWS/SES 验证的个人电子邮件。

我的测试用例:

{
  "email": "redacted@outlook.com",
  "subject": "desc",
  "message": "Hello!"
}

它通过并返回“已发送电子邮件”,但我实际上没有收到电子邮件。我还部署了 API-GATEWAY,我可以使用 Postman 调用 API,我收到相同的“已发送电子邮件”消息,但实际上没有发送电子邮件。

我认为在沙盒模式下应该不是问题,因为我发送它的电子邮件已经过验证。

PS:

当查看 SES 管理控制台时,它说正在发送电子邮件(它们占用了 200 每日配额的一部分),然后它们都没有被退回或拒绝,而只是交付。

stack overflow Email not being sent / No errors AWS/SES
原文答案

答案:

作者头像

在深入研究之前,您应该与 SES 核对一些事项。

  1. 在沙盒模式下,“源电子邮件地址”和“目标电子邮件地址”都必须进行验证。相反,不会发送邮件。

  2. 如果您验证电子邮件域,则必须在您的域中添加适当的 dns 和 DKIM 记录。如果您使用公司域,还需要额外的白名单许可。

  3. 应允许您的 IAM AWS 用户执行 SES api 调用。检查您的政策和角色。检查您使用的密钥和密钥 ID。

  4. 当您使用不适当的电子邮件类型和电子邮件发送端点时可能会出现问题(例如,您尝试通过“BulkTemplatedMessage”端点发送“SingleTemplatedMessage”)

首先检查所有这些东西。

那你可以试试别的。在我的项目中,我们使用基于 java 的 AWS SDK 在 BE 和 SES 之间进行交互。它提供包含消息状态的日志(如果消息发送成功、被拒绝、其 ID 和其他错误(如果发生))

此外,要跟踪您发送的每条消息,您可以设置 SES-SNS 以与通知进行交换。在下面的文章中有描述

https://sysgears.com/articles/how-to-track-email-status-with-amazon-ses-and-amazon-sns/

您的邮件客户端可能会出现其他问题(垃圾邮件过滤器等)

作者头像

按照检查列表对 SES 电子邮件发送进行故障排除:

  1. 使用 AWS 共享的代码检查 SMTP 凭证是否正常
  2. 在多个应用程序/IP 中使用相同的凭据可能无法正常工作
  3. 使用最小邮件配置,如果您不知道设置值将其删除,请不要将其保留为 NULL。
    4.设置,$config['charset'] = 'UTF-8'; // // 'UTF-8', 'ISO-8859-15'
    5.设置,$config['newline'] = "rn"; // "rn" 或 "n" 或 "r"

附加检查

  1. 如果 SES 帐户是 Sandbox,请确保尝试向同一个域发送电子邮件
    2.检查所有出站与邮件的TCP端口是否打开
  2. 如果使用 NATgateway 检查入站和出站与邮件 TCP 端口是否在开放中为其中的邮件发送实例打开。