4. メールを用いた記事の投稿2006.09.01 株式会社四次元データ 岡本和也
Ruby on Rails 4章 メールを用いた記事の投稿
本章ではこれまでの章において構築してきた Web アプリケーションを改良し、 メールで記事の投稿が行えるようにします。但し、本章の方法が使用できるのは これまで構築してきた Web アプリケーションが UNIX ベースで構築されている場合に限ります。 また、本章ではメール配送エージェントとして Sendmail が用いられているものとして 説明を行います。もし、メール配送エージェントして Postfix, Qmail を用いている場合、 あるいは、gmail などのソフトを利用し POP3 で別のメールサーバからメールを受け取っている場合は Ruby on Rail の公式ホームページにある HowToReceiveEmailsWithActionMailer を参考に設定して下さい。 はじめに Rails において メーラの作成を行います。diary フォルダにおいて 以下のコマンドを実行してください。 ruby script/generate mailer Mailmanすると、diary/app/models 以下に mailman.rb というファイルが作成されますので ここに受け取ったメールを処理するプログラムを記述します。(後述。) 次に、aliases の設定を行います。前提として、これまで作成してきた diary フォルダが 「yonta」というユーザによって作成され、diary フォルダが「yonta」ユーザのホームディレクトリ (権限は755)の直下にあるものとします。 ~/home/yonta/diary/aliases ファイルは ~/etc/mail/aliases ~/etc/aliasesなどにあると思います。aliases ファイルに以下の1行を追加してください。 yonta: "| /usr/local/bin/ruby /home/yonta/diary/script/runner 'Mailman.receive STDIN.read'"上記の一部である /usr/local/bin/ruby は ruby の実行ファイルです。もし、ruby の実行ファイルが ~/usr/bin/ruby などの別の場所にある場合は、その ruby の実行ファイルのある場所を 記述してください。aliases ファイルの設定は以上で終了です。 続けて smrsh の設定を行います。sendmail は smrsh によって実行できるプログラムを制限しています ので、メールを受け取った時に ruby が実行できるように設定する必要があります。実際の設定は ln -s /usr/local/bin/ruby /etc/smrsh/とすることで smrsh ディレクトリにシンボリックリンクを追加してやります。先程と同様に、ruby の 実行ファイルが ~/usr/bin/ruby などの別の場所にある場合は、その ruby の実行ファイルのある場所を 記述してください。また、smrsh ディレクトリも ~/etc/smrsh/ 以外に ~/var/smrsh/ や ~/usr/local/smrsh/ などにある可能性がありますので、smrsh ディレクトリのある場所を 記述してください。 最後に最初に作成したメーラの動作を記述します。diary/app/models/mailman.rb を以下のように 作成してください。 1:class Mailman < ActionMailer::Base 2: def receive(email) 3: if email.from[0] == "yonta_mobile@4dd.co.jp" then 4: item = Item.new 5: item.title = email.subject 6: item.text = email.body 7: item.postingdate = Time.now 8: if email.has_attachments? 9: @filename = email.attachments[0].original_filename 10: item.picture_url = "http://localhost:3000/images/" + @filename 11: Item.save(email.attachments[0]) 12: end 13: item.save 14: end 15: end 16:end簡単に説明を行いますが、基本的には3章の diary/app/models/items_controller.rb と同じ動作です。 一番の相違点は3行目です。 3行目でメールの送信者が "yonta_mobile@4dd.co.jp" の場合に限り 4〜13行目を実行すると設定しています。 4行目で Item モデルに新しいフィールドを発行してもらっています。 5, 6行目でメールのタイトルを記事のタイトル、メールの本文を記事の本文とし、 7行目でメールを受け取った日付を記事の投稿された日付としています。 さらに、メールに添付ファイルがあった場合に、その添付ファイルを画像ファイルとみなし、 9〜12行目でファイルをアップロードし、画像ファイルへのリンクを追加しています。 最後に、上記のデータを含んだフィールドをデータベースに格納しています。 以上でメールを用いた記事の投稿は終了です。このように Ruby on Rails を用いれば、 簡単に携帯メールで画像ファイルを添付して記事の投稿を行うことができます。 但し、Web やメールによる書き込み・ファイルのアップロードを許す Web アプリケーションを 製作する場合には、セキュリティに十分配慮する必要があることを忘れてはいけません。 そのことを踏まえた上で、みなさんも Ruby on Rails の勉強をしてみてはいかがでしょうか。 |
![]()
![]()
|