top  Index  Search  Changes  RSS  Login

getHowmMail

動作はしますが,エラー処理がなってません. 動作はWinXPです.


コメント

  • 日付処理は parsedate ライブラリの ParseDate.parsedate を使うと便利です。また文字コードはEUCにできないと困るでしょうから、 $outcode = Kconv::SJIS; Kconv.kconv( line, $outcode ) なんてしておくとよいかもです。…あ、UNIXな人はprocmailあたりで一通ずつ処理する方が一般的?
  • 2004-01-11 (日) 03:01:55 名無しさん : メールで仕事の依頼が来る→Subjectをhowm-mailにして、本文は「[2004-01-11]+ 元メールのSubject」のあとに全文引用して自分に送信、ってな使い方ができるかも
  • 2004-01-22 (木) 22:55:39 名無しさん : 「メールを適当にふりわけといて, ふりわけ先を howm-search-path に追加」って手もありますね
  • 2004-02-12 (木) 07:53:50 名無しさん : これも一種の HowmFrontEnd
(Please LogIn to post comments.)

#!/usr/ruby/bin/ruby.exe
###
### getHowmMail.rb (written by Daichi ABIKO)
###   メモったメールをhowmへ取り込むスクリプトby Ruby
###
### メールボックスチェックしてタイトルがhowm-mailというやつがあったら
### Dateヘッダの時間からファイル名を作って,適切なディレクトリにに入れる.
### ディレクトリがなかったら作る.
###
### *ルール
###   Subject: "howm-mail"にする(でないとけられる)
###   Date: ファイルネームになる
###   メールの内容の一行目: howmのタイトル(=は勝手に付けてくれる)
###   2行目以降はメモの中身


# TODO: エラー処理をまともなものにする

require 'net/pop'
require 'kconv'

debug = false # デバック表示するならtrue
deleteflag = false # howmメールをサーバから消すならtrue

$popserver   = "foobarbaz.co.jp" # サーバ
$port        = 110
$username    = "youraccount" # アカウント
$passwd      = "yourpasswd" # パスワード
$titleheader = "=" # タイトルのヘッダ(っていうのか?)
$howmdir     = "c:/freesoft/xyzzy/howm/" # howmのメモが入ったディレクトリ
month = {'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04',\
  'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08',\
  'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12'}

howmfilecnt = 0 # サーバ上のhowmデータ数
mailcnt = 0 # サーバ上のメール数
$deletedfile = 0 # 消したhowmメールの数


## howmメールを削除する
## (実際はPOPMailのインスタンス渡せばなんでも消してくれる)

def deleteHowmMail(m,t) # POPMailとそのタイトルを受け取る
  begin
  rescue
    puts "rescue! Some error was occurd at delete a howm file."
    m.reset
  else
    puts "delete howmmail! (#{t.chomp})"
    m.delete
    $deletedfile += 1
  ensure
  end
end


# サーバとアカウントの設定
Net::POP3.start($popserver,$port,$username, $passwd) do |pop|

  # メールがないときは何もしない
  (puts "Mail is nothing."; exit) if pop.mails.size == 0

  pop.mails.each do |mail|
    mailcnt += 1
    contents = mail.pop.split(/\r\n/)  # メールの中身獲得

    # タイトルが"howm-mail"じゃなかったら次へ
    if (contents.grep(/^Subject: /)).grep(/howm-mail/).to_s == ""
      puts "Normal file: #{contents.grep(/^Subject: /)}"
      next
    end

    # 日付からファイル名を決定
    date = contents.grep(/^Date: /).to_s.sub(/^Date: /, "").split(/[,]?[: ]/)
    howmfile = sprintf("%s-%s-%s-%s%s%s.howm",\
      date[3], month[date[2]], date[1], date[4], date[5], date[6])

    # ディレクトリチェック
    # $howmdirがなければ終了
    puts "PWD0: #{Dir::pwd}" if debug == true
    if !(File.exist?($howmdir))
      puts "Error: There is no howm directory."
      exit
    end
    Dir::chdir($howmdir)

    # 年月のディレクトリがなければ生成
    puts "PWD1: #{Dir::pwd}" if debug == true
    if !(File.exist?(date[3]))
      puts "  Make directory: #{date[3]}(year)"
      Dir::mkdir(date[3])
    end
    Dir::chdir(date[3])

    puts "PWD2: #{Dir::pwd}" if debug == true
    if !(File.exist?(month[date[2]]))
      puts "  Make directory: #{month[date[2]]}(month)"
      Dir::mkdir(month[date[2]])
    end
    Dir::chdir(month[date[2]])

    # 本文をlinesに入れる
    flag = false
    lines = []
    contents.each do |line|
      (flag = true; next) if line == ""
      lines.push(Kconv.tosjis(line) + "\n") if flag == true
    end
    howmtitle = lines.shift # タイトル取り出し

    # howmファイル作って書き込み
    # もしすでにあれば何もしない
    if File.exist?(howmfile)
      puts "Already exist: #{howmtitle.chomp} (#{howmfile})"
    else
      howmfilecnt += 1
      f = File.open(howmfile, "w")
      puts "Make howm file: #{howmfile}"
      f.puts "#{$titleheader} #{howmtitle}"
      f.puts lines.join
      Dir::chdir($howmdir)
    end
    # howmメールを消す(フラグでOn/Offできる)
    deleteHowmMail(mail,howmtitle) if deleteflag == true
  end
end

puts "#{$deletedfile} howm files were deleted."
puts "Converted howm file: #{howmfilecnt}/#{mailcnt}"
puts "done"


Last modified:2008/03/09 14:09:18
Keyword(s):
References:[併用ツール]