2017-08-06 20 views
0

これは以前に尋ねられたことですが、私はRails ActionMailer Guidesをフォローしているだけでなく、stackoverflowに関するいくつかの関連する質問を調べています。私はlocalhostを実行して、そこから電子メールを送信しようとしています。レールのガイドから、私はすべてのステップをたどって、すべてがガイドのように書かれていることを確認しました。私もここで見つけたいくつかの質問を読んだが、まだ私の電子メールはlocalhostから送信されていません。また、サーバー内でエラーが発生していません。Rails Action Mailer with Devise

設定/環境/ development.rb

EDIT

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } 

    #Mailers 
    config.action_mailer.delivery_method = :sendmail 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.default_options = {from: '[email protected]'} 

    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    address:    'smtp.gmail.com', 
    port:     587, 
    domain:    'localhost:3000', 
    user_name:   ENV["ADMIN_EMAIL"],                             
    password:    ENV["DOG_SEEKER_GMAIL"], 
    authentication:  'plain', 
    enable_starttls_auto: true 
} 

メーラー/ admin_mailer.rb

Class AdminMailer < Devise::Mailer 
helper :application 
include Devise::Controllers::UrlHelpers  

編集

def welcome_email(admin)                                 
    @admin = admin 
    @login_url = "localhost:3000/admins/sign_in" 
    mail(to: @admin.email, subject: "Welcome to Dog Seeker!") 
end 

アプリ/管理/ admin_controllers.rb

def create 
    @admin = Admin.new(params[:admin]) 

    respond_to do |format| 
    if @admin.save 
     AdminMailer.welcome_email(@admin).deliver_now 
     format.html { redirect_to(@admin, notice: 'Admin was successfully created.') } 
     format.json { render json: @admin, status: :created, location: @admin } 
    else 
     format.html { redirect_to new_admin_registration_path } 
     format.json { render json: @admin.errors, status: :unprocessable_entity } 
    end 
    end 
end 

UPDATE

ログイン新しい管理サインアップ

Started POST "/admins" for 127.0.0.1 at 2017-08-05 22:09:15 -0700 
Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"<token>==", "admin"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} 
    (0.2ms) BEGIN 
    Admin Exists (0.6ms) SELECT 1 AS one FROM "admins" WHERE "admins"."email" = $1 LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]] 
    SQL (0.6ms) INSERT INTO "admins" ("email", "encrypted_password", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["email", "[email protected]"], ["encrypted_password", "<password>"], ["created_at", "2017-08-06 05:09:15.904920"], ["updated_at", "2017-08-06 05:09:15.904920"]] 
    (2.0ms) COMMIT 
    (0.1ms) BEGIN 
    SQL (0.5ms) UPDATE "admins" SET "sign_in_count" = $1, "current_sign_in_at" = $2, "last_sign_in_at" = $3, "current_sign_in_ip" = $4, "last_sign_in_ip" = $5, "updated_at" = $6 WHERE "admins"."id" = $7 [["sign_in_count", 1], ["current_sign_in_at", "2017-08-06 05:09:15.909337"], ["last_sign_in_at", "2017-08-06 05:09:15.909337"], ["current_sign_in_ip", "127.0.0.1/32"], ["last_sign_in_ip", "127.0.0.1/32"], ["updated_at", "2017-08-06 05:09:15.909955"], ["id", 29]] 
    (0.5ms) COMMIT 
Redirected to http://localhost:3000/ 
Completed 302 Found in 172ms (ActiveRecord: 4.5ms) 


Started GET "/" for 127.0.0.1 at 2017-08-05 22:09:15 -0700 
Processing by HomepagesController#index as HTML 
    Rendering homepages/index.html.erb within layouts/application 
    Rendered homepages/index.html.erb within layouts/application (0.5ms) 
    Admin Load (0.7ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = $1 ORDER BY "admins"."id" ASC LIMIT $2 [["id", 29], ["LIMIT", 1]] 
    Rendered shared/_header.html.erb (5.5ms) 
    Rendered shared/_main.html.erb (1.0ms) 
Completed 200 OK in 18ms (Views: 16.2ms | ActiveRecord: 0.7ms) 

別の更新

私は別のメーラを持っています犬が生まれたときに送信されますローカルホストと上のすべての設定でうまく動作します。私の推測では、管理者アカウントが作成されたときにメーラーが送信しない理由は、登録コントローラーが私のコントローラーをオーバーライドしているためです。言い換えれば、admin_controllerで作成アクションを打つのではなく、devises登録コントローラー内で登録を実行しています。

追加情報が必要な場合はお知らせください。

+1

私が過去にActionMailerを使用して以来、電子メールが開発を通じて送られるとは思われません。あなたのログを見て、そこに電子メールが表示されるはずです。 – hashrocket

+1

私はそれが行くべきだと思います。物事がどのように引き起こされるかを見るためには、ログが必要です。しかし、私はMailhogまたはmailcatcherを使用することをお勧めします(最新のものはGemです)、両方ともDockerで利用可能であるため、環境を混乱させることはありません。 –

+0

あなたのコードで '@login_url =" https://dogseeker.herokuapp.com/admins/sign_in "の上に私の注意を引いたことがありますが、実際にあなたの開発環境のURLを' config.action_mailer 'として定義しています。 default_url_options = {ホスト: 'localhost'、ポート:3000} '。あなたの質問が開発環境(テスト環境またはステージング環境)のものであれば、私は得られません。 –

答えて

0

Devise Wikiからガイドに従っていて、管理者がサインアップしたときに動作させることができました。