以下のサイトを参考に。
- http://wota.jp/ac/?date=20050731 ActionMailer の使い方
- ActionMailer設定色々 | てらじろぐ POPBeforeSMTPに関する情報
基本は
1. ActionMailerを継承してクラスを作る
require 'action_mailer' class MyPluginMailer < ActionMailer::Base end
2. 適当なメソッドを作る
require 'action_mailer' class MyPluginMailer < ActionMailer::Base def remainder( user ) end end
3. メールを作る
from,recipients,subjectなどはそのまま設定
本文はテンプレートを使って作るので、そちらに引き渡したい情報を body に設定
require 'action_mailer' class MyPluginMailer < ActionMailer::Base # リマインダメールを送る def remainder( user ) subject "リマインダのテスト" from "couger@example.com" recipients user.mail body :user=>user end end
4. 本文に利用するテンプレートを作る
上記の MyPluginMailer の場合 views/my_plugin_mailer/remainder.rhtml になる。
ここではまった…。
5. コントローラーから呼び出して、メールを送る
MyPluginMailer に作ったメソッド remainder の前に deliver_ を付けること。
class MyPluginController < ApplicationController # リマインダメールを送る def deliver_remainder() MyPluginMailer.deliver_remainder( user ) end end
以上。分かっていればとても簡単。メールサーバや認証の設定がこれに加わる。
家で使っているプロバイダは
- POPbeforeSMTP を使っている
- メール送るときにも認証が必要
だったので、
require 'action_mailer' require 'net/pop' ActionMailer::Base.delivery_method = :smtp # デフォルトSMTPらしいのでいらないかも。 ActionMailer::Base.smtp_settings = { :address => 'mail.example.com', :port => 587, :domain => 'localhost', # いるのだろうか? :authentication => 'login', :user_name => 'couger@example.com', :password => 'password' } class MyPluginMailer < ActionMailer::Base # リマインダメールを送る def remainder( user ) # POPbeforeSMTPへの対応 Net::POP3.auth_only('mail.example.com', 110, 'couger@example.com', 'password') subject "リマインダのテスト" from "couger@example.com" recipients user.mail body :user=>user end end
以上。
POPbeforeSMTPだけ入れて、SMTPの認証を忘れてたせいでかなりはまってしまった…。
文字コードに関する問題があるみたいだけど、そっちは次の機会に。