rubyによるメール転送プログラム

rubyによるメール転送プログラム

リアルタイムに見たいMLがあるのだけど、携帯のメアドは設定で着ませんでした。通常のアドレスで受信して携帯にそのMLだけ転送する仕掛けを作って見ました。

ちなみに、rubyでの初プログラミング.....だと思います(^^)。

準備

メール解析のためにTmailというライブラリを使いました。

http://tmail.rubyforge.org/ からダウンロードしてください。

ダウンロード、解凍後に以下の操作でインストールできます。

ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

fedoraの場合、ruby-develをインストールしておく必要があるようです。

プログラム

こんな感じ。

require 'tmail'
require 'net/pop'
require 'kconv'
require "net/smtp"

pop = Net::POP3.new( '<POP3サーバのアドレス>', 110 )
pop.start( '<メールユーザー>', '<パスワード>' )
if pop.mails.empty? then
  puts 'no mail.'
else
  pop.each_mail do |m|

  maildata = TMail::Mail.parse(m.pop)
  mailfrom = String( maildata.from )
  ecodefrom = Kconv.toutf8( mailfrom )
  sendbody = maildata.body

  if ecodefrom == "<転送対象のメールアドレス>" then
       sendmail = TMail::Mail.new
       sendmail.to = "<転送先メールアドレス>"
       sendmail.from = "<転送時の送信元メールアドレス>"
       sendmail.reply_to =  "<転送時の送信元メールアドレス>"

       work = Kconv.tojis( sendbody ).split(//,1).pack('m').chomp
       sendmail.subject = maildata.subject
       sendmail.body = Kconv.tojis(sendbody)

       sendmail.date = Time.now
       sendmail.mime_version = '1.0'
       sendmail.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'}
       Net::SMTP.start( "<SMTPサーバのアドレス>" ) do |smtp|
          smtp.sendmail(sendmail.encoded, sendmail.from,sendmail.to)
       end
       m.delete
    end
  end
 end
pop.finish

お世辞にも綺麗なプログラムとは言えません(^^;)。いろんなサイトのプログラムを参考に作りました。

Last modified:2013/08/03 10:02:22
Keyword(s):
References: