メール送信

Rails3標準では、「ちゃんと使える」Action Mailerがあるので、ぜひ使おう

  • 手順としては、こんな感じかな?
  • まずは、コンフィグ設定
    • まあ本には無かったけど、ここを参考にGmailの設定をしてみる
      • こんな感じで、config/environments/development.rbに設定を追加
         config.action_mailer.delivery_method = :smtp
         config.action_mailer.smtp_settings = {
           :enable_starttls_auto => true,  
           :address            => 'smtp.gmail.com',
           :port               => 587,
           :domain             => 'gmail.com',
           :authentication     => :plain,
           :user_name          => '自分のメアド@gmail.com',
           :password           => '自分のパスワード'
         }
        
      • development環境だとメール送信されないので、同じくconfig/environments/development.rbにある、以下の行をコメントアウト
        #  config.action_mailer.raise_delivery_errors = false
        
      • 古いSMTPサーバなんかの設定だと、「認証なし」とか信じられないものがあるので、その場合は:authentication以降をコメントアウトする感じかな?
  • 次に、以下のコマンドでメーラーを生成
    rails g mailer NoticeMailer sendmail_confirm
    
    • これだと、クラス名:NoticeMailerで、メソッド名:sendmail_confirmが生成される
  • で、こんな感じで、app/mailers/notice_mailer.rbを修正して、メール送信処理を作る
    #coding: utf-8
    
    class NoticeMailer < ActionMailer::Base
     default from: "from@example.com"
     def sendmail_confirm(user)
       @user = user
       mail to:      "送信先のメアド",
            subject: "テストメール"
     end
    end
    
    • CCにも送りたい場合はこんな感じね
       default from: "from@example.com",
               cc:   "cc@example.com"
      
  • 更に、こんな感じで、app/views/notice_mailer/sendmail_confirm.text.erbに、メール本文のテンプレートを書く
    ユーザ名:<%= @user.username %>
    メールアドレス:<%= @user.email %>
    URL:<%= url_for( :host => 'www.example.com', :controller => 'books', :action => 'index' ) %>
    
  • 最後にこんな感じで、メール送信アクションを作って叩けば、メールが出る、はず?
       def send_mail
         user = User.find(1)
         @mail = NoticeMailer.sendmail_confirm(user).deliver
        render :text => "送信できた!"
       end
    
    • これでメールの内容は、ちゃんとuserの内容が出るね。
  • 同じように、HTMLテンプレートをapp/views/notice_mailer/sendmail_confirm.html.erbに置けば、HTMLメールとテキストの[multipart/alternative]形式で送られるみたいだねー

-
最終更新:2012年02月20日 06:53