AWS SES超时

时间:2015-05-14 19:22:48

标签: ruby amazon-web-services rubygems ruby-on-rails-4.2 amazon-ses

我使用的是Rails 4.2,AWS-SES gemMailform 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,但我仍然会超时。这两颗宝石有可能不相容吗?否则,任何有关解决或排除故障的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

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

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

  1. AWS设置 - 使用AWS,您可以在沙箱模式下启动。您需要在SES控制台中注册所有目标电子邮件地址,才能使用。点击Email Addresses链接列出您已验证的地址并添加更多地址。此外,您还需要设置AWS IAM凭据以与gem一起使用。执行此操作时,请确保用户已附加SES完全访问管理策略(在IAM控制台上)。
  2. :server设置 - AWS在多个地区运营,但您的SES帐户将设置在其中一个地区。要确定您所在的地区,请转到AWS控制台并单击SES。您会在网址中看到您所在的区域 - 对我来说是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访问它们。
  6. /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