#author("2019-01-29T16:24:45+09:00","default:wikiwriter","wikiwriter") #author("2019-01-29T16:35:49+09:00","default:wikiwriter","wikiwriter") &tag(Rails/メール送信); *目次 [#r8d78eb3] #contents *関連ページ [#h799088f] -[[Rails]] *参考情報 [#d35b1fa4] -[[Action Mailer の基礎 | Rails ガイド:https://railsguides.jp/action_mailer_basics.html]] *概要 [#n407a356] -RailsにはデフォルトでActionMailerという仕組みが組み込まれている。 -他のGemsを追加する必要はなし。 *基本的な使用方法 [#ka5a7426] **設定ファイルの変更 [#pd05fb35] -development.rb / production.rbでsmtpサーバーに関する設定を行う。 -開発環境では通常postfixなどローカルのsmtpサーバーが動いていないので、smtp_settingsでいろいろ設定してやらないといけない。 ''外部のsmtpサーバーを使って認証してから送信する例'' #pre{{ config.action_mailer.raise_delivery_errors = true config.action_mailer.default_url_options = { :host => "localhost", :port => 3000 } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "my.smtp.com, :port => 587, :user_name => "tanaka@my.smtp.com", :password => "smptpass", :authentication => 'plain', :enable_starttls_auto => false, } }} ''ローカルでsmtpサーバーが動いている場合'' #pre{{ config.action_mailer.raise_delivery_errors = true config.action_mailer.default_url_options = { :host => "localhost", :port => 3000 } config.action_mailer.delivery_method = :smtp }} **ファイル生成 [#xa440a80] -railsコマンドでひな形を生成できる。app/mailers/user_mailer.rbとapp/views/user_mailerという空ディレクトリが作成される。 #pre{{ $ bundle exec rails generate mailer UserMailer create app/mailers/user_mailer.rb create app/mailers/application_mailer.rb invoke erb create app/views/user_mailer create app/views/layouts/mailer.text.erb create app/views/layouts/mailer.html.erb invoke test_unit create test/mailers/user_mailer_test.rb create test/mailers/previews/user_mailer_preview.rb }} **user_mailer.rbを編集する [#xff410d6] -app/mailers/user_mailer.rbを編集する。 -controller的な役目で、インスタンス変数に設定するとビュー側から参照できるのも同じ。 #pre{{ class UserMailer < ActionMailer::Base default from: "from@example.com" def hello @greeting = "Hi" mail to: "foo@bar.jp" end end }} **hello.text.erbの作成 [#caa259e3] -app/views/user_mailer/hello.text.erbを作成する。 -view的な役目。hello.text.erbの場合テキスト形式のメールとなる。 #pre{{ テストメッセージです。 <%= @greeting %> }} ** 送信する [#l68cbbdd] -どこかのコントローラーのアクションから以下のように呼び出す。 UserMailer.hello. deliver UserMailer.hello.deliver