2

我正在尝试使用 Meteor 包与tarang:email-ses@Akshat 构建的 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.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?

4

2 回答 2

8

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

要使用 AWS SES 启用 SMTP 访问:

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

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

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

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

于 2015-01-21T16:27:12.413 回答
2

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

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

  • 登录AWS 管理控制台
  • 转到 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 服务 -> 域并按照说明进行操作。

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

于 2016-02-18T18:58:04.263 回答