2010/11/09

Rails3 で POP before SMTP

Rails3 で POP before SMTP にてメール送信できるまで。

ジェネレータで mailer を作成する。
rails g mailer TestMailer

config/application.rb にメール設定を追加
module Sample
  class Application < Rails::Application
    # ---- なんかいろいろ ----

    # mail setting
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :enable_starttls_auto => false,
      :address => 'smtp.example.com',
      :port => 587,
      :domain => 'localhost',
      :user_name => 'user',
      :password => 'password'
    }
  end
end

メール本文を erb で。
<%= @text %>

配信メソッドを mailers/test_mailer.rb に追加。
# -*- coding: utf-8 -*-
require 'net/pop'
class TestMailer < ActionMailer::Base

  # テストメールを配信する
  def test
    @text = 'this is test mail' # インスタンス変数で view にデータを渡せる
    mail(
      :subject => 'Test mail',
      :from => 'from@example.com',
      :to => 'to@example.com'
    )
    authenticate
  end

  private
  # 認証メソッド
  def authenticate
    Net::POP3.auth_only(self.smtp_settings[:address], 110, self.smtp_settings[:user_name], self.smtp_settings[:password])
  end
end

実行
rails runner "TestMailer.test.deliver"

これで、deliver メソッドでの配信前に POP3 の認証が終わっているのでメールの送信ができる。
mailer をたくさん作るなら、ActionMailer::Base を拡張するようにしたほうがいいかな。

参考にしたサイト:てらじろぐ | ActionMailer設定色々

0 件のコメント :

コメントを投稿