2007年12月9日日曜日

【Ruby de Mailer】Rubyでメーラーを作ってみようと思った。

メーラーを自分で作ってみようと思った。

せっかくならRubyで作ろうと。

net/popとかnet/smtpをか使ったことないし。

思い立ったらすぐ行動で、net/popのリファレンスに書いてあったのを真似してReceiveクラスを作ってみた。
-----
require 'net/pop'

$pop3_server = 'hoge'
$pop3_acount = 'foo'
$pop3_passwd = 'bar'

class Receive
 def receive
  Net::POP3.start( $pop3_server, 110, $pop3_acount, $pop3_passwd ){ |pop|
   if pop.mails.empty? then
    puts 'メールがありません。'
   else
    allcnt = 0
    newcnt = 0
    pop.each_mail do |m|
     path = 'receive/' + allcnt.to_s
     if File.exists?(path) == false
      File.open(path, 'w'){ |f|
       f.write m.pop
      }
      newcnt += 1
     end
     allcnt += 1
    end
    if newcnt == 0
     puts "新着メールはありません。"
    else
     puts "#{newcnt.to_s}件の新着メールを受信しました。"
    end
   end
  }
 rescue => error
  p error
 end
end

r = Receive.new
r.receive
-----

受信出来た!

結構いけるんじゃね??



データを全部データベースで管理しよう。sqliteで管理する事に決めた。

ここを見ながらやってみた。

RubyForgeを見たら、gemでいけるみたいなのでやってみた。
-----
gem install sqlite3-ruby
-----
最新版をインストール。

SQLite Download Pageからsqlitedll-3_5_3.zipをダウンロード。解凍。sqlite3.dllを実行フォルダに置いた。

-----
require 'rubygems'
require 'sqlite3'
if File.exists?(test.db') == false
 db = SQLite3::Database.new( "test.db" )
 sql = <<EOF
  CREATE TABLE test (
   id integer,
   content varchar(255)
  );
EOF
 db.execute(sql)
else
 db = SQLite3::Database.new( "test.db" )
end

db.execute( "SELECT * FROM test" ) do |row|
 puts row
end

db.close
-----

お、ちゃんと出来るみたいだ。

ちょっと現実味が出てきたかな。


これからやること。
・GUIはどうしよう?(やっぱりvrubyだろうか。ruby/tk?)
・送信処理
・テーブル定義
・いろんなメーラーの仕様を見てみる(フォルダ振り分けとか、フィルタリングとか)

0 件のコメント: