メールレスポンスシステム in  変なプログラマーの作り方 #10 綿 100% / men100percent [email_address]
メールレスポンスシステムとは <ul><li>メールでやりとりをするシステム </li></ul><ul><ul><li>そのまんま </li></ul></ul><ul><li>空メール </li></ul><ul><ul><li>会員登録 ...
一般的なWebサービスと比べた メリットとデメリット <ul><li>メリット </li></ul><ul><ul><li>端末側はメール機能さえあれば良い </li></ul></ul><ul><ul><ul><li>ブラウザとか要らない <...
これらを踏まえると <ul><li>(空メールなどの) 簡易サービスが圧倒多数なのも納得 </li></ul>
実現方法 <ul><li>Sendmail, qmail, Postfix, などの MTA (Message Transfer Agent) に来たメールをスクリプトに渡す。 </li></ul><ul><li>スクリプトがメールを受け取り、...
スクリプトへの渡し方 <ul><li>Sendmail, Postfix </li></ul><ul><ul><li>.forward  ファイルに記述する [3] </li></ul></ul><ul><ul><ul><li>このファイルはメ...
スクリプト側 <ul><li>メールを送信できる必要がある </li></ul><ul><ul><li>MTA を操作できる必要がある </li></ul></ul><ul><li>Perl とかだと </li></ul><ul><ul><li...
ま、何というか <ul><li>結構シンプルな感じですね </li></ul>
何か作ろうか <ul><li>実際にメールレスポンスシステムを実装したい </li></ul><ul><ul><li>でも、自前のメールサーバとか無かったりする </li></ul></ul><ul><li>ISP や GMail のアカウント...
設計 <ul><li>持っているアカウントの受信監視をする </li></ul><ul><ul><li>例えば 1 分ごとに見に行く </li></ul></ul><ul><li>新規メールを受信 </li></ul><ul><li>受信したメ...
実装結果 <ul><li>Perl で実装 </li></ul><ul><ul><li>メール処理のためのモジュール  Net::POP3[5] 、 Net::SMTP[6]  が最初から利用可能 </li></ul></ul><ul><ul>...
実装結果 Cont. <ul><li>続き </li></ul><ul><ul><li>受信メールの解析は  MIME::Parser モジュールにお任せ </li></ul></ul><ul><ul><ul><li>送信者” from” は ...
そんなこんなで、完成(?) <ul><li>今回は、 </li></ul><ul><ul><li>一番最新のメール“のみ”受信 </li></ul></ul><ul><ul><li>本文に ” hoge”  があったら返信対象 </li></u...
まとめ <ul><li>メールレスポンスシステムを構築するための機能は十分揃っている </li></ul><ul><li>スクリプトでメールを扱う手段も十分揃っている </li></ul><ul><ul><li>ただし、メールの仕様上、ソフトウ...
<ul><li>ありがとうございました </li></ul>
引用・参考 <ul><li>[1] 45gs  時計とカメラとモバイル : Amazon モバイルで、メールによる商品検索サービス ,  http://45gs.blog.ocn.ne.jp/45gs/2006/04/amazon_9a47.h...
Upcoming SlideShare
Loading in …5
×

Mail Response System (HBEP#10)

1,265 views

Published on

Study session
"How to Bring up Eccentric Programmer " #10
slide by men100per

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,265
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mail Response System (HBEP#10)

  1. 1. メールレスポンスシステム in 変なプログラマーの作り方 #10 綿 100% / men100percent [email_address]
  2. 2. メールレスポンスシステムとは <ul><li>メールでやりとりをするシステム </li></ul><ul><ul><li>そのまんま </li></ul></ul><ul><li>空メール </li></ul><ul><ul><li>会員登録 </li></ul></ul><ul><ul><li>懸賞 </li></ul></ul><ul><li>Amazonモバイル メール検索 サービス </li></ul><ul><ul><li>本文に検索キーワードを入れて送信 </li></ul></ul><ul><ul><li>検索結果のURLが返信される </li></ul></ul>[1]
  3. 3. 一般的なWebサービスと比べた メリットとデメリット <ul><li>メリット </li></ul><ul><ul><li>端末側はメール機能さえあれば良い </li></ul></ul><ul><ul><ul><li>ブラウザとか要らない </li></ul></ul></ul><ul><ul><li>直感的で分かりやすい </li></ul></ul><ul><ul><ul><li>複雑な操作が要らない </li></ul></ul></ul><ul><li>デメリット </li></ul><ul><ul><li>即時性の欠如 </li></ul></ul><ul><ul><ul><li>送って、返信を待って、受信トレイを開いて・・・ </li></ul></ul></ul><ul><ul><li>サービスに幅が持たせられない </li></ul></ul><ul><ul><ul><li>インターフェースがメール機能なので・・・ </li></ul></ul></ul>
  4. 4. これらを踏まえると <ul><li>(空メールなどの) 簡易サービスが圧倒多数なのも納得 </li></ul>
  5. 5. 実現方法 <ul><li>Sendmail, qmail, Postfix, などの MTA (Message Transfer Agent) に来たメールをスクリプトに渡す。 </li></ul><ul><li>スクリプトがメールを受け取り、ごにょごにょ処理 </li></ul><ul><ul><li>と言った風にさばいていると思われます [2] </li></ul></ul>MTA スクリプト ユーザさん メール メール メール メール 来たのを渡す 新規作成 処理 送信 返信
  6. 6. スクリプトへの渡し方 <ul><li>Sendmail, Postfix </li></ul><ul><ul><li>.forward ファイルに記述する [3] </li></ul></ul><ul><ul><ul><li>このファイルはメールを転送するだけかと思ってました </li></ul></ul></ul><ul><li>qmail </li></ul><ul><ul><li>.qmail ファイルに記述する [2] </li></ul></ul><ul><li>パイプでプログラムと引数を記述 </li></ul><ul><ul><li>| hoge.exe arg </li></ul></ul><ul><ul><li>あと、“ | hoge.exe arg” とか |“hoge.exe arg” </li></ul></ul><ul><li>セキュリティの観点?から Postfix などでは初期設定では無効 </li></ul><ul><ul><li>:include: ファイルにて </li></ul></ul><ul><ul><ul><li>allow_mail_to_commands = alias,forward,include とすると OK (らしい) [4] </li></ul></ul></ul>
  7. 7. スクリプト側 <ul><li>メールを送信できる必要がある </li></ul><ul><ul><li>MTA を操作できる必要がある </li></ul></ul><ul><li>Perl とかだと </li></ul><ul><ul><li>sendmail コマンドをプログラム内から呼び出す </li></ul></ul><ul><ul><ul><li>MTA 共通のメール送信プログラム </li></ul></ul></ul><ul><ul><ul><ul><li>qmail, Postfix も互換性維持のため持っている </li></ul></ul></ul></ul><ul><li>Ruby とかだと </li></ul><ul><ul><li>Ruby on Rails で ActionMailer というメール送受信モジュールが使えそう </li></ul></ul>
  8. 8. ま、何というか <ul><li>結構シンプルな感じですね </li></ul>
  9. 9. 何か作ろうか <ul><li>実際にメールレスポンスシステムを実装したい </li></ul><ul><ul><li>でも、自前のメールサーバとか無かったりする </li></ul></ul><ul><li>ISP や GMail のアカウントなら持ってます </li></ul><ul><ul><li>なら、それでやってみよう </li></ul></ul>
  10. 10. 設計 <ul><li>持っているアカウントの受信監視をする </li></ul><ul><ul><li>例えば 1 分ごとに見に行く </li></ul></ul><ul><li>新規メールを受信 </li></ul><ul><li>受信したメールのチェック </li></ul><ul><ul><li>送信元アドレスが xxx じゃなければダメだとか、本文に ooo が要るとか </li></ul></ul><ul><li>送信元のメールアドレスに対して返信 </li></ul>
  11. 11. 実装結果 <ul><li>Perl で実装 </li></ul><ul><ul><li>メール処理のためのモジュール Net::POP3[5] 、 Net::SMTP[6] が最初から利用可能 </li></ul></ul><ul><ul><li>GMail ならば GMail::Checker という直接的なモジュールがあったりする </li></ul></ul><ul><ul><li>最初は Ver.GMail アカウントの実装開始 </li></ul></ul><ul><ul><ul><li>GMail は SSL 必須 </li></ul></ul></ul><ul><ul><ul><li>Perl の SSL モジュールがインストールできない </li></ul></ul></ul><ul><ul><ul><ul><li>Cygwin だから? </li></ul></ul></ul></ul><ul><ul><li>泣く泣く、 Ver.ISP アカウントの実装開始 </li></ul></ul><ul><ul><ul><li>こっちは SSL 要らず </li></ul></ul></ul><ul><ul><ul><li>受信はすんなり OK </li></ul></ul></ul><ul><ul><ul><ul><li>$pop3 = Net::POP3->new($popServer); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>$pop3->login($id, $password); </li></ul></ul></ul></ul>
  12. 12. 実装結果 Cont. <ul><li>続き </li></ul><ul><ul><li>受信メールの解析は MIME::Parser モジュールにお任せ </li></ul></ul><ul><ul><ul><li>送信者” from” は $entity->head->get('from'); </li></ul></ul></ul><ul><ul><ul><li>本文” body” は $entity->body; </li></ul></ul></ul><ul><ul><li>送信 </li></ul></ul><ul><ul><ul><li>$smtp = Net::SMTP->new( $smtpServer); </li></ul></ul></ul><ul><ul><ul><li>$smtp->auth($id, $password) </li></ul></ul></ul><ul><ul><ul><li>$smtp->datasend($message) </li></ul></ul></ul><ul><ul><ul><li>すんなりうまくいった様に思えたが ( 何もエラー出ないので ) 、 全くメールが来ない・・・ </li></ul></ul></ul><ul><ul><ul><ul><li>ISP の SMTP は SMTP Auth が必要だが、システムに Authen::SASL 入っていなかった(つまり何もしていなかった ) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>エラーメッセージ出して欲しいな・・・ orz </li></ul></ul></ul></ul></ul>
  13. 13. そんなこんなで、完成(?) <ul><li>今回は、 </li></ul><ul><ul><li>一番最新のメール“のみ”受信 </li></ul></ul><ul><ul><li>本文に ” hoge” があったら返信対象 </li></ul></ul><ul><ul><li>hello とだけ本文に書いたメールを返信 </li></ul></ul><ul><ul><ul><li>ここからが一番面白いところなのだが、時間切れ・・・ </li></ul></ul></ul><ul><ul><ul><ul><li>E.g. 本文に書いた場所の天気予報を調べて返してくれる、 とか </li></ul></ul></ul></ul><ul><li><del> デモ </del> </li></ul><ul><ul><li>ネット環境が・・・ </li></ul></ul><ul><li>自宅にて動作するのは確認 </li></ul>
  14. 14. まとめ <ul><li>メールレスポンスシステムを構築するための機能は十分揃っている </li></ul><ul><li>スクリプトでメールを扱う手段も十分揃っている </li></ul><ul><ul><li>ただし、メールの仕様上、ソフトウェアの作業が大きくなりがち </li></ul></ul><ul><ul><ul><li>完全にカバーしようとすると数千行オーダーもザラ </li></ul></ul></ul><ul><li>ネットワークプログラミングはやっぱり To Love る(ぉぃ </li></ul><ul><ul><li>面白いけど </li></ul></ul>
  15. 15. <ul><li>ありがとうございました </li></ul>
  16. 16. 引用・参考 <ul><li>[1] 45gs 時計とカメラとモバイル : Amazon モバイルで、メールによる商品検索サービス , http://45gs.blog.ocn.ne.jp/45gs/2006/04/amazon_9a47.html </li></ul><ul><li>[2] 受信メールをプログラムに渡すには Netsphere Laboratories : http://www.nslabs.jp/filter-mail.rhtml </li></ul><ul><li>[3] Postfix manual - local(8) : http://www.postfix-jp.info/trans-2.2/jhtml/local.8.html </li></ul><ul><li>[4] Postfix 設定パラメータ : http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html#allow_mail_to_commands </li></ul><ul><li>[5] Net::POP3 - Post Office Protocol 3 Client class (RFC1939) - search.cpan.org : http://search.cpan.org/~gbarr/libnet-1.19/Net/POP3.pm </li></ul><ul><li>[6] Net::SMTP - Simple Mail Transfer Protocol Client - search.cpan.org : http://search.cpan.org/~gbarr/libnet-1.22/Net/SMTP.pm </li></ul><ul><li>[7] Net::SMTP->auth - World Wide Walker : http://yoosee.net/d/archives/2004/08/25/002.html </li></ul>

×