Rubyでメールの作成、送信、解析

rubygemのMailを使う。

インストール

RVMを使って、Ruby 1.9.3をインストールしている。

環境確認(特にgemsetに注意。gemsetごとにrubygemsライブラリがインストールされるので。)

% rvm use ruby-1.9.3-head
% ruby -v
ruby 1.9.3p5 (2011-11-30 revision 33907) [i686-linux]
% rvm gemset list
rvm gemset list
gemsets for ruby-1.9.3-head (found in /usr/local/rvm/gems/ruby-1.9.3-head)
   global
=> rails3
% rvm gemset use rails3

Twitter gemのインストール

% rvmsudo gem install mail
% gem list | grep mail
actionmailer (3.2.1, 3.1.3, 3.1.1)
mail (2.4.1, 2.3.0)

SMTPサーバーを使ってメール送信

25番ポートから認証なしでメールをうけつけてくれるSMTPサーバーが192.168.11.1 にある場合。日本語メールをUTFー8で送るならば以下のようにする。

# -*- coding: utf-8 -*-
require 'rubygems'
require 'mail'

 options = { 
    :address              => "192.168.11.1",
    :port                 => 25
  }

  Mail.defaults do
    delivery_method :smtp, options
  end

 mail = Mail.new do
      from  'hogehoge@hohoge.jp' 
      to    'noronoro@noronoro.jp'
    end
    mail.charset ='utf-8'
    mail.subject = '日本語タイトル' 
    mail.body  = '日本語本文'

    mail.deliver

JISで送る方法をためしたけど、どうしてもうまくいかなかった。

読む場合

~/Mailにメールが [0-9]* という形式のファイル名で格納されているとき、From欄を抜きだす。

require 'rubygems'
require 'mail'

begin
  if ARGV.length != 1
    puts "error: please input directory path\n"
    exit
  end

  path = ARGV[0]
  files = Dir.glob("#{path}/[0-9]*")

  
  files.each do |filename|
    mail= Mail.read(filename)
    puts "#{filename} #{mail.sender}"
  end
  
rescue => ex
  puts ex.message
end

使う。

% ruby tmp.rb ~/Mail