AWS SES 超时

AWS SES Timeout

我用的是Rails4.2,AWS-SES gem and the Mailform gem。我正在尝试在开发中设置 AWS SES 并将其添加到 config/development.rb:

  # Configure mail using AWS SES
  config.after_initialize do
    ActionMailer::Base.delivery_method = :amazon_ses
    ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
        :access_key_id => ENV['AWS_SECRET_KEY_ID'],
        :server => 'email.eu-west-2.amazonaws.com'
    )
  end

当我尝试从控制台发送电子邮件时,我在 30 秒后超时。我开始把所有这些写下来寻求帮助,但后来我想到 MailForm 可能不是从 ActionMailer 派生的。果然,MailForm::Base 有超类 Object,所以配置 ActionMailer 毫无意义。

我将这两行更改为配置 MailForm::Base,但我仍然超时。这两个宝石可能不兼容吗?否则,我们将不胜感激任何解决或故障排除的建议。

正如我在问题中提到的,MailFormAWS-SES gem 开箱即用不兼容。有可能它们可以一起工作,但我选择了不同的路线。

设置AWS-SES的一些关键(代码包含在下面供参考):

  1. AWS 设置 - 使用 AWS,您从沙盒模式开始。您需要在 SES 控制台中注册所有目标电子邮件地址才能正常工作。单击 Email Addresses link 以列出您已验证的地址并添加更多。此外,您将需要设置 AWS IAM 凭据以与 gem 一起使用。执行此操作时,请确保用户附加了 SES 完全访问托管策略(在 IAM 控制台上)。
  2. :server 设置 - AWS 在多个区域运行,但您的 SES 帐户将在其中一个区域设置。要确定您的区域,请转到 AWS 控制台并单击 SES。您会在 URL 中看到您所在的地区 - 对我来说是 region=us-west-2。我建议按照 Dan Croak 的 excellent article 中所述设置初始化程序。我按照 Dan 的建议做了,除了我将交付方式设置为 :amazon-ses 并添加了服务器配置行。
  3. 配置 - Dan 的文章(如上所述)解释了如何在您的环境配置文件中设置 delivery_method。同样,我使用了 :amazon-ses.
  4. 配置 AWS 并安装 gem 后,您可以在 rails 控制台中测试您的设置。在那里进行故障排除比在您的代码库中更容易。
  5. 有点无关,但我用Dotenv gem 来管理我的环境设置。简而言之,安装 gem 后,您可以将所有环境设置粘贴到 ~/.env 中,并在整个代码中在 ENV 中访问它们。

/config/initializers/amazon-ses.rb

ActionMailer::Base.add_delivery_method :amazon_ses, AWS::SES::Base,
  :access_key_id      => ENV['AWS_SECRET_KEY_ID'],
  :secret_access_key  => ENV['AWS_SECRET_ACCESS_KEY'],
  :server             => 'email.us-west-2.amazonaws.com'

/config/environments/development.rb(节选):

# Configure mailer for development test
config.action_mailer.raise_delivery_errors = true

# Configure mail using AWS SES
config.action_mailer.delivery_method = :amazon_ses

# Configure URL options
host = 'www.example.com'
config.action_mailer.default_url_options = { host: host }

当然,要在生产环境中进行这项工作,您需要对 /config/environments/production.rb 进行这些更改。您还需要在生产服务器上进行 AWS 机密设置。如果您使用的是 Heroku:

$ heroku config:add AWS_SECRET_KEY_ID=12345XYZ
$ heroku config:add AWS_SECRET_ACCESS_KEY=67890ABC