Rubyでメールを受信。
ヘッダー情報等、一切切らずにかつテキストで保存したとか思って書いてみた。
ruby
なんとなくファイル名はcpop
CUI で POP3メールとかそんなだった気がする。
どうでもいいのですでに忘却。
#!/usr/bin/env ruby #設定ファイル名 rcfile=".cpoprc" require 'net/pop' require 'yaml' require 'readline' require 'openssl' #暗号化 def encrypt(text, key) enc = OpenSSL::Cipher::Cipher.new('aes256') enc.encrypt enc.pkcs5_keyivgen(key) ((enc.update(text) + enc.final).unpack("H*")).to_s rescue false end #復号化 def decrypt(text, key) dec = OpenSSL::Cipher::Cipher.new('aes256') dec.decrypt dec.pkcs5_keyivgen(key) (dec.update(Array.new([text]).pack("H*")) + dec.final) rescue false end #こっから本体。 #マスターパスワードの入力 begin #パスワード入力のためローカルエコーを切る system "stty -echo" master = Readline.readline( "master password: ", false ) #ローカルエコーを戻す system "stty echo" print "\n" rescue Interrupt #途中でInterruptされた場合も戻さないと悲惨なことに... system "stty echo" print "\n" exit end #設定ファイルを読み込む if File.exist?( "#{ENV['HOME']}/#{rcfile}" ) then settings = YAML.load( File.open( "#{ENV['HOME']}/#{rcfile}" ).read ) settings.each { |name,hash| #各種設定 #パスワードだけ暗号化されてる。 server = hash[ 'server' ] username = hash[ 'username' ] password = decrypt( hash[ 'password' ], master ) savedir = hash[ 'savedir' ] port = hash[ 'port' ] #改行がこなくても進捗が表示される用にsyncる STDOUT.sync = true print "connecting #{server} ... " begin Net::POP3.start( server, port, username, password ) { |pop| puts "done" tmp=0 pop.mails.each { |m| #ユニークID、通し番号を取得 uniq,num = m.unique_id.split( '.', 2 ) print "recieving mail ##{num} ... " if not File.exist?( "#{savedir}/#{num}" ) then #未受信 File.open( "#{savedir}/#{num}", 'w' ) { |f| m.pop f f.chmod 0444 print "done : " #Fromフィールを抜き出す。 puts /^From: (.*)$/.match( m.header )[1] } else puts "exist" end } } rescue puts "failed" end } end
設定ファイルはyamlで。
hoge: server: pop3.hoge.jp username: foo password: 83bf330ad53eed4beab559f65e253b63 savedir: /home/alice/inbox/hoge port: 110 fuga: server: pop3.fuga.ne.jp username: bar password: ce8e403cf9f3b1d1cb16ec89254ebb88 saverdir: /home/alice/inbox/fuga port: 110
こんな感じで複数かけます。
パスワードは暗号化されてるのですが、それ用のウィザードを作ってないので
の様にやって出てきた文字列の中身を張り付けてやってください。
マスターパスワードを使うので、複数アカウントで別パスを使ってても安心(何が?
というかむしろセキュリティは無い、と思ってもらった方がいいです。はい。
これでも使ってvimメーラでも作ってみようかな(w