[TOP] [HOME] [AGILE] [OBJECT] [PROGRAMMING] [JAVA] [LINUX] [OKINAWA] [BBS] [DIARY]

メールで送った画像をサーバに保存させる

目次

はじめに

インターネットで日記を書くにあたって、画像を簡単にサーバに送って公開できるようになると便利です。 今現在私がもっている携帯にはカメラがついていないのですが、将来カメラ付携帯を買った場合に携帯で撮った 写真をそのままメールでサーバに送りサーバで勝手に保存してくれると便利です。

そこでvine linuxで公開しているサーバでrubyおよびprocmailを使って上記の事を実現してみました。

準備するもの

rubyスクリプト

画像の添付ファイル付のメールより添付ファイルを取り出して保存するrubyスクリプトを用意します。

rubyのパスは適時読み替えてください。

$SAVE_DIRには画像を公開するためのフォルダを指定してください。

mailparse.rb

#!/usr/bin/ruby

$SAVE_DIR='画像を公開するためのフォルダ'
require 'tmail'
require 'base64'

mailstring = ''
while (line = gets())
        mailstring += line
end

mail = TMail::Mail.parse(mailstring)

if mail.multipart? then
        mail.parts.each do |m|
                if m.main_type != 'text'
                        filename =  File.basename(m.disposition_param('filename').gsub(/\\/, '/'))
                        file = File.open($SAVE_DIR + filename, "w+")
                        file.chmod(0644)
                        file.write(decode64(m.body))
                        file.close()
                end
        end
end

できれば、受信済みのメール(テキスト形式)を用意して

>mailparse.rb < 受信済みメール
などとして動作確認をしておくと良いでしょう。

作成したスクリプトは適当な場所に保存してchmodで実行権限を付けておきます。

メールをprocmailに処理させる

作成したrubyスクリプトに受信メールを処理させるためにprocmailを利用します。

まず、.forwardファイルをホームディレクトリに作成し以下のように記述します。

"|exec /usr/bin/procmail"

これで受信したメールがprocmailに渡されるようになります。

次に.procmailrcファイルをホームディレクトリに作成しprocmailの動作を記述します。

PATH=$HOME/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/from
LOCKFILE=$HOME/.lockmail

:0
| $HOME/bin/mailparse.rb

ここでは受信したメールをすべてmailparse.rbに渡してしまっていますが、ここで使用するメール アドレスが画像保存専用のものではない場合は、特定のメールアドレス(自分の携帯のメールアドレス) から送られてきたメールのみmailparse.rbに処理させるように設定すると良いでしょう。

ここまでで設定は完了です。実際に画像付のメールを送ってみて、画像が指定したフォルダに保存されていれば成功です。

うまくいかない場合は、LOGFILE=$MAILDIR/fromで指定したファイルを確認してみてメールがprocmailに渡ってきているか 確認してみてください。

更新履歴

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。

あなたの名前: メール:
(お名前・メールは、いずれも未記入でかまいません)

今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメール でお願いします。