2

我正在使用Rails 4.2,AWS-SES gemMailform gem。我试图建立AWS SES开发和已经加入这个config/development.rbAWS SES Timeout

# 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,但我仍然得到一个超时。这两个宝石可能不兼容吗?否则,任何解决或排除故障的建议将不胜感激。

回答

3

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

某些键设置AWS-SES(包括下面的参考代码):

  1. AWS成立 - 与AWS您在沙盒模式开始。您需要在SES控制台中注册所有目标电子邮件地址,才能使用任何内容。点击Email Addresses链接列出您的验证地址并添加更多。此外,您需要设置AWS IAM凭证才能与该宝石一起使用。当您这样做时,请确保用户具有附加的SES Full Access托管策略(在IAM控制台上)。
  2. :server设置 - AWS在多个地区运营,但您的SES账户将设置在其中一个地区。要确定您的区域,请转至AWS控制台并单击SES。你会在URL中看到你的地区 - 对我来说它是region=us-west-2。我建议按照Dan Croak的excellent article中的描述设置初始化程序。我按照丹的建议做了,除了我将交付方法设置为:amazon-ses并添加了服务器配置行。
  3. 配置 - 丹的文章(上面提到)解释了如何在您的环境配置文件中设置delivery_method。我再次使用了:amazon-ses
  4. 一旦您配置了AWS并安装了您的gem,您就可以在rails控制台中测试您的设置。在代码库中比在代码库中更容易排除故障。
  5. 有点无关,但我使用了Dotenv 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