メーラーを自分で作ってみようと思った。
せっかくなら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?)
・送信処理
・テーブル定義
・いろんなメーラーの仕様を見てみる(フォルダ振り分けとか、フィルタリングとか)
2007年12月9日日曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿