带流星的 AWS SES

AWS SES with Meteor

我正在尝试推出一个 Meteor 包来与@Akshat 构建的名为 tarang:email-ses 的 AWS SES 交互。

我在 Meteor @1 上。* 运行正在 AWS EC2 实例上。当我用下面的代码测试 运行 时,没有发送电子邮件。

流星代码

我已经设置了 AWS 访问密钥 ID 和秘密访问密钥并在此处使用:

Meteor.startup(function () {    
  Email.configSES({
    AWSAccessKeyID: 'access-key',
    AWSSecretKey: 'secret-key'
  });
});

我还验证了我的电子邮件和域。在这里,我确保我从经过验证的发件人 SES 地址发送:

Accounts.emailTemplates.from = 'Domain Name <support@domain-name.com>';

然后在 Meteor 方法中,我创建一个新用户并像这样发送和注册电子邮件(如果我部署到 meteor.com,当然没有 Accounts.emailTemplates.from,这就有效):

if (Meteor.user() && adminUser(this.userId)) {
  var accountId = Accounts.createUser({
    'username': doc.name,
    'email': doc.email
  });
  Accounts.sendEnrollmentEmail(accountId);
}

问题

设置 email-ses 包的代码是否正确?

我认为这个包抽象出 Amazon SES API 来发送电子邮件(并允许本地 Meteor 电子邮件调用)。是否需要在 AWS 上设置 SMTP?

要在 Meteor 中发送电子邮件,最简单的方法是使用 process.env.MAIL_URL 变量设置 SMTP 服务器和用户名信息。每当您发送邮件时,AccountsEmail 程序包将自动使用它来访问 SMTP 服务器。

要启用 AWS SES 的 SMTP 访问:

  1. 登录 AWS 管理控制台
  2. Select 您设置 SES 的适当区域。
  3. Select 来自应用程序服务列表的 SES
  4. 单击左侧菜单中的 SMTP 设置 菜单项
  5. 单击创建我的 SMTP 凭据 按钮
  6. 使用提供的默认 IAM 用户名。这是一个特殊的 IAM 用户,只能访问 SMTP 服务器。访问 SMTP 服务器时,您不应使用主 IAM username/password。
  7. 确保记下 SMTP 服务器名称。稍后你会需要它。
  8. 创建帐户后下载凭据。

现在您已经设置了一个帐户,只需将以下行复制并粘贴到您的 Meteor 启动文件的顶部,并根据您刚刚下载的凭据文件中的值替换用户名和密码以及服务器名称已提供。

process.env.MAIL_URL = 'smtp://username:password@smtp-server-name:465';

请注意,如果您尚未获得生产访问权限,则必须在 AWS SES 管理控制台中验证发送和接收电子邮件地址。如果您不这样做,Meteor 将在控制台中抛出一个错误并且不会发送消息。

@brian-shamblen 没有直接回答问题,而是提出了发送电子邮件的替代解决方案。

您无需在 AWS 上设置 SMTP,也无需在您的项目中设置环境变量 process.env.MAIL_URL

  • 登录 AWS Management Console
  • 转到 IAM 服务(!!不是 SES)
  • 创建新的 IAM 用户
  • 保存凭据(AWSAccessKeyID 和 AWSSecretKey)。这些是您将在 Email.configSES({...})
  • 中使用的凭据
  • 为此用户创建内联策略:
{   
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }
    ]
}
  • 确保在 Accounts.emailTemplates.from 中使用经过验证的域名。要在 AWS 中验证域,请转到 SES 服务 -> 域并按照说明进行操作。

这应该可以让您发送电子邮件。