conv.rb

仕様

携帯電話からのメールをデータフォルダに入れる
データフォルダ中ではuuidにて一意に決定されるフォルダを作成し、content.txt image.jpg subject.txtに分離する

設置方法

.procmailrc に

 *^Subject.*\[mx\].*
 |conv.rb

とし、Subject: に [mx]が包含されるもののみプログラムへ投入

ソース

はっきりいって汚い。
まあ、変換ブロックだけなのであとで気合が入ったら書き直そう
#着陸しまくったな・・・

 #!/usr/bin/ruby -Ke
 require 'tmail'
 require 'base64'
 require 'nkf'
 kcode='-e'
 outcode='-s'
 programname='[mx]'
 id = `uuidgen`
 datadir = "./data/#{id}".chop
 `mkdir #{datadir}`
 mail=TMail::Mail.parse(STDIN.readlines.join)
 File.open("#{datadir}/subject.txt",'w'){|file|file.write(NKF.nkf(kcode,mail.subject.gsub(programname,'')))}
 filelist=["subject.txt"]
 if mail.multipart? then
   mail.parts.each do |m|
     case m.main_type
     when "text"
       filename="content.txt"
     when "image"
       filename="image.jpg"
     else
       filename="etc"
     end
     filelist.push(filename)
     file = File.open("#{datadir}/#{filename}", "w+")
     file.chmod(0644)
     if filename == "image.jpg"
       file.write(Base64.decode64(m.body))
     else
       file.write(NKF.nkf(kcode,m.body))
     end
     file.close()
   end
 else #添付ファイルなし
   filelist.push("content.txt")
   File.open("#{datadir}/content.txt", "w+"){|file|
     file.chmod(0644)
     file.write(NKF.nkf(kcode,mail.body))
   }
 end
 File.open("#{datadir}/index.html","w"){|file|
   file.write("<html><head></head><body>\n")
   filelist.each{|i|
     if i!="image.jpg"
       File.open("#{datadir}/#{i}"){|j|
         file.write(i.gsub("\.txt",":<br>\n")+NKF.nkf(outcode,j.read.gsub("\n","<br>\n"))+"<br>\n")
       }
     else
       file.write("image:<br>\n<img src=\"#{i}\">\n")
     end
   }