2011-03-14 39 views
2

私はRails 3を使用して電子メール送信機能を実装しています。私は私の設定が正しいかどうかわからないけど、ここに私のコードです:rails 3電子メール送信の問題

メーラー/ user_mailer.rb

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def send_to(user) 
    @user = user 
    subject='welcome !' 
    mail(:to=>'[email protected]', :subject=>subject, :content_type => "text/html") 
    mail.deliver 
    end 
end 

コントローラ

def CarsController < BaseController 
    ... 
    def register_finish 
    UserMailer.send_to(user) 
    end 

end 

のconfig /的環境。 rb

config.action_mailer.delivery_method = :smtp 

config.action_mailer.smtp_settings = { 
    :address => "smtp.googlemail.com", 
    :port => 532, 
    :arguments => '-i' 
    :enable_starttls_auto => true 
    } 

    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 

私のコントローラが 'register_finish'関数を呼び出してユーザに電子メールを送信しようとすると、私はいつもタイムアウト::エラー(実行期限切れ)エラーメッセージを表示します。

私は何人かの人々が設定/初期化子/ setup_email.rb構成を定義し、私はのconfig/enviroment.rbと使用中のそれを設定しながら、

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { ...} 

を使用しました:

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = {...} 

「UserMailer」内で呼び出す間に、一部の人がコントローラー内で「配信」メソッドを呼び出すのも見ました。

私の質問

  1. 私の実装と私は、インターネットから見つかった実装の上記の別の方法の違いは何ですか。

  2. なぜタイムアウトエラーが発生しましたか?

答えて

4

私も自分のSMTPサーバとしてのGmailを使用していると私は、このコード

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "domain.pl", 
    :user_name   => "username", 
    :password    => "password", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

を含むinitiliazersに加算setup_email.rbをしたし、それは私の作品:)

EDITを

私はちょうど私たちが別のサーバーを使用していることに気付いたことがあります。

+0

コンソールが電子メールを送信されましたが、メールボックスが...それのため – Mellon

+0

待機を受けていない、それはしばらく後に来るかもしれない示して私のためにうまく動作します。 –

+0

はまだ受けていない):(なく、ありがとうございました:) – Mellon

2

タイムアウトエラーは、いくつかの認証エラーがあることを意味します。

このラインは、もはや必要ありません:

ActionMailer::Base.delivery_method = :smtp 

初期化子でsmtp_settingsを設定するadviceableですが。

あなたは、この設定はGmailを利用する必要があり、開発マシン上でそれを使用している場合:あなたは開発マシンのために追加することができます

ActionMailer::Base.smtp_settings = { 
:enable_starttls_auto => true, 
:address => 'smtp.gmail.com', 
:port => 587, 
:domain => 'your_domain', 
:authentication => :plain, 
:user_name => 'your_gmail_username', 
:password => 'your_gmail_password' 
} 

EDIT

ActionMailer::Base.default_url_options[:host] = "localhost:3000" 

Very good railscast on subject

+0

を確認してください。 – Mellon

関連する問題