重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

【種別】携帯からの空メールで自動登録できる(サーバー内のcsvファイルに追加する)cgi
【条件】後からメールサーバにとりに行くタイプではなく、
    受信と同時に追加できること。
【言語】PHP、Perlのいずれか

Google探しても、フリーのものは見つかりません。
よろしくお願いします。

A 回答 (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);

この回答への補足

細かなソースまで提供していただき本当に感謝しております。
その後、調べましたら、
.foward
を利用すれば、メールを受信したら、
特定のCGIを起動できるようですが、
記述の仕方がよくわかりりません。

もちろん、.foward 使用を許可するという前提です。

補足日時:2006/10/29 09:04
    • good
    • 0

 PHPの方は分かりません。


 Perl であれば、メールを受信する拡張モジュールをインストールするか、もしくは自前で生成する必要があります。

 自前の場合、自分でソケットを開いてPOPサーバーと通信します。
 参考資料は、ソケットの開き方については "Perl ソケット" で検索できたと思います。
 POPサーバーとの話し方については、プロトコル仕様書を探してみてください。
    • good
    • 0

 電子メールの受信と同時に走るようなプログラムは、CGIでは作れません。


 そのようなプログラムの動作をプロバイダが許しているのであれば、もしかしたら技術情報が公開されているかもしれません。サポートに問い合わせてみてください。

 もしサーバーが自前であれば、お使いのメールサーバーのドキュメントを参照してください。
 メールの受信と同時にイベントを起こすことが可能であれば、その旨の記載があるはずです。

この回答への補足

早速のご回答ありがとうございます。
では、後日、メールサーバからメール情報(ヘッダー情報-メールアドレスと送信者)を取得し、CSVファィルに追加するようなCGIを紹介しいてるサイトをご紹介していただけると助かります。
また、perl,phpのブログラムソースを提供していただけると幸いです。

補足日時:2006/10/24 11:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!