- ベストアンサー
携帯からの空メールでの自動登録するcgi
【種別】携帯からの空メールで自動登録できる(サーバー内のcsvファイルに追加する)cgi 【条件】後からメールサーバにとりに行くタイプではなく、 受信と同時に追加できること。 【言語】PHP、Perlのいずれか Google探しても、フリーのものは見つかりません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
結局はメールがメールサーバに届いたことをきっかけにプログラムが動作しなければいけないので、CGIだけの技術では不可能です。 CGIが起動された後、CGI側でPOP接続を行い、必要な情報を処理しましょう。 以下サンプル。(文字が多いので一部だけ) 詳しくはRFCのメールに関するところを調べてください。 use Socket; # Socket モジュールを使う use MIME::Base64; # プロトコルは POP3 を使う $port = getservbyname('pop3', 'tcp') || 110; # ホスト名を、IPアドレスの構造体に変換 $iaddr = inet_aton($connect_host) || &error("$connect_hostは存在しないホストです。\n",''); # port と IP アドレスをまとめて構造体に変換 $sock_addr = pack_sockaddr_in($port, $iaddr); # ソケット生成 socket(SOCKET, PF_INET, SOCK_STREAM, 0) || &error("ソ\ケットを生成できません。\n",''); connect(SOCKET, $sock_addr) || &error("$connect_host のポート $port に接続できません。\n",''); # ファイルハンドルSOCKETをバッファリングしない select(SOCKET); $|=1; select(STDOUT); # POP3サーバにユーザ名とパスワードを送る print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; $buf = <SOCKET>; # メールの一覧を取得 print SOCKET "LIST\r\n"; while (<SOCKET>){ # 「.」のみの行が送られてきたらループを抜ける m/^\.\r\n$/ && last; # 「メール番号 バイト数」という行なら if ( m/^(\d+) (\d+)\r\n$/ ){ $num=$1; $size=$2; # メール番号を @mails に push push(@mails, $num); } } # 各メールについて foreach ( @mails ){ # メールの内容を送信するようリクエストを送る print SOCKET "RETR $_\r\n"; print SOCKET "DELE $_\r\n"; while (<SOCKET>){ # 「.」のみの行が送られてきたらメールの終り。 m/^\.\r\n$/ && last; # ここでメール取得 } } # サーバとの接続を切る print SOCKET "QUIT\r\n"; close(SOCKET);
その他の回答 (2)
PHPの方は分かりません。 Perl であれば、メールを受信する拡張モジュールをインストールするか、もしくは自前で生成する必要があります。 自前の場合、自分でソケットを開いてPOPサーバーと通信します。 参考資料は、ソケットの開き方については "Perl ソケット" で検索できたと思います。 POPサーバーとの話し方については、プロトコル仕様書を探してみてください。
電子メールの受信と同時に走るようなプログラムは、CGIでは作れません。 そのようなプログラムの動作をプロバイダが許しているのであれば、もしかしたら技術情報が公開されているかもしれません。サポートに問い合わせてみてください。 もしサーバーが自前であれば、お使いのメールサーバーのドキュメントを参照してください。 メールの受信と同時にイベントを起こすことが可能であれば、その旨の記載があるはずです。
補足
早速のご回答ありがとうございます。 では、後日、メールサーバからメール情報(ヘッダー情報-メールアドレスと送信者)を取得し、CSVファィルに追加するようなCGIを紹介しいてるサイトをご紹介していただけると助かります。 また、perl,phpのブログラムソースを提供していただけると幸いです。
補足
細かなソースまで提供していただき本当に感謝しております。 その後、調べましたら、 .foward を利用すれば、メールを受信したら、 特定のCGIを起動できるようですが、 記述の仕方がよくわかりりません。 もちろん、.foward 使用を許可するという前提です。