ActionMailerでメール送信@Sakuraレンタルサーバ  [ruby]  [tips]  [sample_code]

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