【问题标题】:AWS SES with Meteor带有 Meteor 的 AWS SES
【发布时间】:2015-03-19 11:11:17
【问题描述】:

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

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

流星代码

我已经设置了 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?

【问题讨论】:

    标签: amazon-web-services meteor amazon-ses meteor-accounts meteor-up


    【解决方案1】:

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

    使用 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 会在控制台中抛出一个错误,并且不会发送消息。

    【讨论】:

    • 这个解决方案效果很好——干净简单。唯一的缺点是我当然必须发送到经过验证的电子邮件地址(仅当我使用 SMTP 时)。这很痛苦,因为我的客户是否应该在我向他们发送帐户注册电子邮件之前收到亚马逊验证电子邮件?如果这是我唯一的选择,是否也有 API 调用来自动化它?
    • 准备就绪后,您可以请求对 SES 的生产访问权限。获得批准后,您可以向任何地址发送电子邮件,而无需对其进行验证。您只需要在生产模式下验证发送电子邮件地址或域。不过,获得生产访问权限的过程相当复杂。您需要处理来自 SES 的退回和投诉通知,并防止将来向这些地址发送消息。如果您不处理这些通知,AWS 可能会关闭您。 docs.aws.amazon.com/ses/latest/DeveloperGuide/…
    • 谢谢。我提出了生产访问请求。我应该在这里打开另一个关于在流星中处理这些场景的问题吗?
    • 我愿意。设置所有内容涉及很多步骤,具体取决于您选择实施它的方式。最好将每个问题隔离为一个单独的问题,以便其他 SO 用户以后更容易找到解决方案。
    • 为了让它工作,我需要用encodeURIComponent对用户名和密码进行编码。
    【解决方案2】:

    @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 中使用经过验证的domail。要在 AWS 中验证域,请转到 SES 服务 -> 域并按照说明进行操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2018-02-02
      相关资源
      最近更新 更多