我使用的是Rails 4.2,AWS-SES gem和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
,但我仍然会超时。这两颗宝石有可能不相容吗?否则,任何有关解决或排除故障的建议都将受到赞赏。
答案 0 :(得分:3)
正如我在问题中提到的,MailForm
和AWS-SES
宝石不兼容开箱即用。可能它们可以一起工作但我采取了不同的路线。
设置AWS-SES
的一些键(下面的代码供参考):
Email Addresses
链接列出您已验证的地址并添加更多地址。此外,您还需要设置AWS IAM
凭据以与gem一起使用。执行此操作时,请确保用户已附加SES完全访问管理策略(在IAM控制台上)。:server
设置 - AWS在多个地区运营,但您的SES帐户将设置在其中一个地区。要确定您所在的地区,请转到AWS控制台并单击SES。您会在网址中看到您所在的区域 - 对我来说是region=us-west-2
。我建议设置一个初始化程序,如Dan Croak的excellent article中所述。我就像Dan推荐的那样做,除了我将交付方法设置为:amazon-ses
并添加了服务器配置行。delivery_method
。我再次使用:amazon-ses
。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