インターネットで日記を書くにあたって、画像を簡単にサーバに送って公開できるようになると便利です。 今現在私がもっている携帯にはカメラがついていないのですが、将来カメラ付携帯を買った場合に携帯で撮った 写真をそのままメールでサーバに送りサーバで勝手に保存してくれると便利です。
そこでvine linuxで公開しているサーバでrubyおよびprocmailを使って上記の事を実現してみました。
画像の添付ファイル付のメールより添付ファイルを取り出して保存する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で実行権限を付けておきます。
作成した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に渡ってきているか 確認してみてください。
あなたのご意見・感想をお送りください。
何かの理由でうまく送れない場合にはメール
でお願いします。