2007年12月10日月曜日
2007年12月9日日曜日
【Ruby de Mailer】送信出来たよ
smtpでの送信が出来た。例にならってクラス化しました。
ついでに、MessegeBoxモジュール作成。エラー捕捉に使ってみた。
-----
require 'Win32API'
require 'net/smtp'
module Msg
def info(message)
messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
messagebox.call(0, message, 'Info', 0)
end
end
class Send
include Msg
def send(to, subject, content)
Net::POP3.auth_only( "#{$pop3_server}", "#{$pop3_port}", "#{$user}", "#{$passwd}" )
Net::SMTP.start( "#{$smtp_server}", "#{$smtp_port}", "localhost.localdomain", "#{$user}", "#{$passwd}", :plain ) {|smtp|
smtp.ready( "#{$address}", "#{to}" ) {|f|
f.puts "From: #{$address}"
f.puts "To: #{to}"
f.puts "Subject: #{subject}"
f.puts
f.puts "#{content}"
}
}
rescue => error
info(error)
exit(1)
end
end
-----
処理的には、POP Before SMTPでやってみた感じ。
自分の使ってるメールサーバがPOP Before SMTPだから。。。
GUIはやっぱりvrubyになりそうな感じ。
難しいなぁ・・・と思う今日この頃。
ついでに、MessegeBoxモジュール作成。エラー捕捉に使ってみた。
-----
require 'Win32API'
require 'net/smtp'
module Msg
def info(message)
messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
messagebox.call(0, message, 'Info', 0)
end
end
class Send
include Msg
def send(to, subject, content)
Net::POP3.auth_only( "#{$pop3_server}", "#{$pop3_port}", "#{$user}", "#{$passwd}" )
Net::SMTP.start( "#{$smtp_server}", "#{$smtp_port}", "localhost.localdomain", "#{$user}", "#{$passwd}", :plain ) {|smtp|
smtp.ready( "#{$address}", "#{to}" ) {|f|
f.puts "From: #{$address}"
f.puts "To: #{to}"
f.puts "Subject: #{subject}"
f.puts
f.puts "#{content}"
}
}
rescue => error
info(error)
exit(1)
end
end
-----
処理的には、POP Before SMTPでやってみた感じ。
自分の使ってるメールサーバがPOP Before SMTPだから。。。
GUIはやっぱりvrubyになりそうな感じ。
難しいなぁ・・・と思う今日この頃。
【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?)
・送信処理
・テーブル定義
・いろんなメーラーの仕様を見てみる(フォルダ振り分けとか、フィルタリングとか)
せっかくなら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?)
・送信処理
・テーブル定義
・いろんなメーラーの仕様を見てみる(フォルダ振り分けとか、フィルタリングとか)
登録:
投稿 (Atom)