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