メール送信

ちょっとしたメール送信(自分の携帯へ送信とか)でいちいちメーラを起動するのもめんどくさい。
いろいろ調べて、RubySMTPを使ったメール送信なら出来るようになった。

require 'net/smtp'
require 'kconv'
require 'date' 
require 'jcode'
$KCODE = 'utf8'

class Rmail
  #from,to = [:addr, :name] #Hash
  def initialize(from, to, subject="タイトル無し")
    @from = from
    @to = to
    @subject = subject

    @smtp = 'smtp.hoge.com'
    @port = 25
    @user = 'name'
    @pass = 'passward'

    @body = ""  
    @head = head
  end
  attr_accessor :body

  #ヘッダメッセージ作成
  def head   
    head = ""
    head << sprintf("From: %s <%s>\n", Kconv.tojis(@from[:name]), @from[:addr])
    head << sprintf("To: %s <%s>\n", Kconv.tojis(@to[:name]), @to[:addr])
    head << sprintf("Subject: %s\n", Kconv.tojis(@subject))

    head << sprintf("Date: %s\n", date)

    t = DateTime.now.to_s.split(/-|T|:/)[0..-2].join("")
    head << sprintf("Message-Id: <%s_yashushi@aol.com>\n", t)

    head
  end
  private :head

  #ヘッダで使用するDate:のフォーマットに合わせた文字列
  def date
    t = Time.now.to_s.split(/ /)
    sprintf("%s, %s %s %s %s %s (JST)", t[0], t[2], t[1], t[5], t[3], t[4])
  end

  #メッセージ作成
  def make_message
    @mes = @head + "\n\n" + Kconv.tojis(@body)
  end

  #メール送信
  def send
    ret = nil

    Net::SMTP.start(@smtp, @port, @smtp, @user, @pass, :plain) do |smtp|
      ret = smtp.send_mail(@mes, @from[:addr], @to[:addr])
    end

    #p ret
    return true if /OK/ =~ ret
    return false
  end
end

from = {}
from[:addr] = "hogehoge@hoge.com"
from[:name] = "自分"

to = {}
to[:addr] = "to@hoge.com"
to[:name] = "宛先"

rmain = Rmail.new(from, to)
rmain.body = "テストメール"
rmain.make_message
rmain.send