
No.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 使用を許可するという前提です。
No.2
- 回答日時:
PHPの方は分かりません。
Perl であれば、メールを受信する拡張モジュールをインストールするか、もしくは自前で生成する必要があります。
自前の場合、自分でソケットを開いてPOPサーバーと通信します。
参考資料は、ソケットの開き方については "Perl ソケット" で検索できたと思います。
POPサーバーとの話し方については、プロトコル仕様書を探してみてください。
No.1
- 回答日時:
電子メールの受信と同時に走るようなプログラムは、CGIでは作れません。
そのようなプログラムの動作をプロバイダが許しているのであれば、もしかしたら技術情報が公開されているかもしれません。サポートに問い合わせてみてください。
もしサーバーが自前であれば、お使いのメールサーバーのドキュメントを参照してください。
メールの受信と同時にイベントを起こすことが可能であれば、その旨の記載があるはずです。
この回答への補足
早速のご回答ありがとうございます。
では、後日、メールサーバからメール情報(ヘッダー情報-メールアドレスと送信者)を取得し、CSVファィルに追加するようなCGIを紹介しいてるサイトをご紹介していただけると助かります。
また、perl,phpのブログラムソースを提供していただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 電子マネー・電子決済 auじぶん銀行デビットカードについて 1 2022/11/17 13:32
- アジア ベトジェットエアの登録について 1 2023/07/03 14:43
- その他(プログラミング・Web制作) robots.txtが”allow”のサイトを探しています 2 2022/10/09 13:07
- X(旧Twitter) 楽天モバイルなどで作った電話番号をTwitter認証用に登録する場合について 1 2023/02/04 21:42
- Facebook FACEBOOKのアカウント乗っ取りについて 1 2022/05/06 06:36
- 電子マネー・電子決済 Apple Payウォレットにクレジットカードを登録、認証済みなのに使えません 今まで自分のiPho 1 2023/01/25 15:45
- Yahoo!メール Yahooアカウントにログインできなくなって困っています。 2 2023/05/16 02:28
- その他(動画サービス) ディズニープラスへの加入を考えています。 わかる方、教えてください。 ①私の携帯で登録した場合、他の 5 2023/05/21 17:48
- X(旧Twitter) Twitterの電話番号の登録に関する質問です。 2 2023/04/01 08:40
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
ソケット通信
-
closeされたsocketへの動作につ...
-
送信したデータの一部が文字化...
-
VBのソケット通信(winsock)の...
-
recv関数でフリーズしてしまう
-
ソケットのrecvの戻り値が0
-
【ajax】 XMLHttpRequestオブジ...
-
VBとCでのソケット通信について
-
ソケット通信の送受信遅延-02 ...
-
ソケットのクローズについて
-
WinSockでの通信プログラムがう...
-
Socket通信の0バイト受信について
-
UDPの宛先ポートと送信元ポート...
-
Winsockで接続待ちタイムアウト...
-
Macターミナルで実行中のプログ...
-
C言語で、メモリを解放しないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットでクライアントのipア...
-
ソケットを用いた1対多通信につ...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
相手のIPアドレスを取得する方法
-
recv関数でフリーズしてしまう
-
closeされたsocketへの動作につ...
-
送信したデータの一部が文字化...
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
Connectエラーが出てしまう・・...
-
WinSockでの通信プログラムがう...
おすすめ情報