Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
[DMY] [VB] [VB6] [Python] [C#] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [CE] [LTSA]
[自動化] [Qt] [OCaml] [3Dプリンタ] [TOOLS] [RAA] [Forge]
  [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [EA] [マクロ]

2007-12-13

POP3によるメール受信

16:12 | POP3によるメール受信 - Rubyの魔神 を含むブックマーク はてなブックマーク - POP3によるメール受信 - Rubyの魔神 POP3によるメール受信 - Rubyの魔神 のブックマークコメント

indoxというフォルダを作り、その中に1,2,…という名前で受信メールを保存する

pop.rb

#!/usr/local/bin/ruby -Ks
require 'net/pop'
require 'thread'
require 'pstore'

MailDir = './inbox/'
Dir::mkdir(MailDir) if not FileTest::directory?(MailDir)

counter = PStore.new(MailDir+'counter')
counter.transaction do
  if counter['counter'].nil? then
    counter['counter'] = 1
  end
end

begin
  recvMail = Thread.new do
    i = 0
    while true
      counter.transaction do
        i = counter['counter']
      end
      
      Net::POP3.delete_all( 'xxx.sakura.ne.jp', 110,'xxx@xxx.sakura.ne.jp', 'xxx' ) do |m|
        File.open( MailDir + i.to_s, 'w' ) {|f|
            f.write m.pop
        }
        counter.transaction do
          i += 1
          counter['counter'] = i
          puts i
        end
      end
      sleep 10
      print 'r'
    end
  end
rescue
  p $! 
end
#while true
#end

recvMail.join
gets

tmailのサンプルで添付ファイルをデコード

コマンドラインで

extract-attachments.rb 1 などとやると添付ファイルがデコードされる

ファイル名が復元されないのが残念

ExcelWordを追加して保存をバイナリ("wb")に変えた

extract-attachments.rb

#
# extract-attachments.rb  -- Extracts attachment(s) from the message.
#
# Usage: ruby extract-attachments.rb mail mail...
#

require 'tmail'

def main
  idx = 1
  ARGV.each do |fname|
    TMail::Mail.load(fname).parts.each do |m|
      m.base64_decode
      File.open("#{idx}.#{ext(m)}", 'wb') {|f|
        f.write m.body
      }
      idx += 1
    end
  end
end

CTYPE_TO_EXT = {
  'image/jpeg' => 'jpeg',
  'image/gif'  => 'gif',
  'image/png'  => 'png',
  'image/tiff' => 'tiff',
  'application/vnd.ms-excel' => 'xls',
  'application/msword' => 'doc'
}

def ext( mail )
  CTYPE_TO_EXT[mail.content_type] || 'txt'
end

main

[Ruby]TMailの添付ファイルの名前の取り出しとActionMailerの添付ファイルの名前付けCommentsAdd Star

TMailの添付ファイルの名前の取り出しとActionMailerの添付ファイルの名前付け - もち

実験してみます

良く分かりませんでしたorz

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071213