Railsを使わないで、rubyからActionMailerでメールを送信したくなったので、やり方のメモ。
ActionMailerは、gemでインストール済みと仮定。
Sakuraレンタルサーバ(さくら)の場合、”POP before SMTP”なので、送信前にpop認証が必要となります。
require 'rubygems'
require 'action_mailer'
require 'net/pop'
class MyMailer < ActionMailer::Base
alias_method :base_perform_delivery_smtp, :perform_delivery_smtp
@@pop3_auth_done = nil
def self.setup_for_sakura
self.delivery_method = :smtp
self.smtp_settings = {
:address => 'xxx.sakura.ne.jp',
:port => 587,
:domain => 'xxx.sakura.ne.jp',
:pop3_auth => {
:server => 'xxx.sakura.ne.jp',
:user_name => 'hoge@xxx.sakura.ne.jp',
:password => 'passw0rd',
:expires => 1.hour,
:authentication => :login
}
}
self.template_root = File.dirname(__FILE__) + "/templates"
self.perform_deliveries = true
end
def mail_contents(user,contents)
from "hoge <hoge@xxx.sakura.ne.jp>"
recipients "#{user} <#{user}>"
subject "日本語タイトルほげふが"
body :user => user, :contents => contents
end
private
def perform_delivery_smtp(mail)
do_pop_auth if !@@pop3_auth_done or (Time.now - smtp_settings[:pop3_auth][:expires]) >= @@pop3_auth_done
base_perform_delivery_smtp(mail)
end
def do_pop_auth
pop = Net::POP3.new(smtp_settings[:pop3_auth][:server])
pop.start(smtp_settings[:pop3_auth][:user_name], smtp_settings[:pop3_auth][:password])
@@pop3_auth_done = Time.now
pop.finish
end
end
で、./templates/my_mailer/mail_contents.erbに、テンプレートを適当に作成。
<%= @user %> 様
<%= @contents[:hello] %>ですねん。
ほな
これを利用する側はこんな感じ。
require 'rubygems'
require File.dirname(__FILE__) + "/my_mailer"
MyMailer.setup_for_sakura
MyMailer.deliver_mail_report('user@hogefuga.com', {:hello => "こんにちは"})
rubygemsへのパスが通ってない場合は、$LOAD_PATH.push(“パス”), ENV[‘GEM_HOME’] = “パス”、でライブラリ及びGEM_HOMEのパスを通しておきましょう。
参考: http://railsforum.com/viewtopic.php?pid=47672
ツイート