pop/smtp

レーニングを兼ねて、ちょっとしたスクリプトを書いてみる。
あるメールアドレスに対して定期的にメールチェックを行い、メールが来ていたら別アドレスに通知を出すというスクリプトを考えているのだが……まだ書きかけ状態。
一応、メールを取ってきたり送信したりはできるようになった。

#!/usr/bin/env ruby

require 'net/pop'
require 'net/smtp'

def get_mail(pop_addr, port_no, account, password)
  Net::POP3.start(pop_addr, port_no, account, password) {|pop|
    if pop.mails.empty? then
      return false
    else
        pop.each_mail do |m|
        # 各メールに対する処理...
        #print m.header
      end
    end
  }
end

def create_header(from_addr, to_addr, subject, body)
  return <<EOM
From: #{from_addr}
To: #{to_addr}
Subject: #{subject}
Date: #{Time.now}
Message-Id: <#{Time.now.strftime('%Y%m%d%H%M%S.') + \
  rand(1000).to_s.rjust(4, '0')}.#{to_addr}>

#{body}
EOM
end

def send_mail(smtp_addr, port_no, mail_body, from_addr, to_addr)
  Net::SMTP.start(smtp_addr, port_no) {|smtp|
    smtp.send_mail mail_body, from_addr, to_addr
  }
end

# main
# % で囲まれた部分は、環境に応じて書き換える
get_mail('%pop server%', 110, '%account%', '%password%')
header = create_header('%from%', '%to%', 'Test mail', 'This is test mail.')
send_mail('%smtp server%', 25, header, '%from%', '%to%')