よくメールマガジンサイト(携帯版)で見かけるのですが、空メールを送信して登録、解除できるサイトがあります。このような仕組みを是非CGIで実現してみたいとおもっていますがこのようなものはCGIで実現可能なのでしょうか?今回は、メールが飛んできたらログファイルにそのメールアドレスを書き込むと言うものだけでかんがえています。
もしできるとするならは、
1.空メールが送られてくるたびにCGIを起動させる方法
2.空メールのヘッダーを読み込みそれを送信元アドレス取得する方法
この2点が質問ないようです。またこれ以外にも他の方法はありますか?

ちなみに僕のサーバー環境はrimネットのホスティングサービスを利用していいます。

1の質問でどうやら.forwardのなかに"|exec /home/user/script"を記述して

#!/usr/local/bin/perl
 while (<STDIN>){処理}
とすれば/home/user/scriptはメールを送られてくるたび実行されるらしいのですがうまくいきませんでした。

この山はどうしても越えたいのでどなたかご教授よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんな風に記述すれば良いのでは.



ただし、From: が複数行になっている場合は考慮していません

-->
#!/usr/local/bin/perl

# 多分、フルパスで書いたほうが安全だと思います.
$mail = "/..../data/mail.log";

#ここらへんにメールアドレスのヘッターを読み込み送信元メールアドレスを
#取得する記述??

# メール本体
@text = <STDIN>;

$line="junk";
while ((@text) && ($line ne ""))
{
$line = shift(@text);
chomp($line);
if ($line =~ /^From: /)
{
($tmp, $from) = split(":", $line, 2);
}
}
if(!open(OUT,">>$mail"))
{print 'ファイルへの書込みができませんでした。',"\n"; exit;}

print OUT "取得したメールアドレス,$from\n";

close(OUT);
exit;
<--

$from に From: の右側の情報が入ります.

メールアドレス以外の情報(名前など)がある場合は、
そこからメールアドレスのみを抽出する必要がありますね.
    • good
    • 0

~/.forward の該当部分と、


それで起動されるスクリプトを見せていただかないと
何ともいえないのですが、該当の処理は可能ですよ。

/etc/aliases などでやるのが私は好きですが、
ホスティングサービスじゃぁしょうがないですね。

あ、~/.forward やスクリプトのパーミッションはOKですよね。
あと、~/ 自体も。
perlのパスなんかは大丈夫でしょうか。
とりあえずそっちは、単体でテストできますよね。
それはどうでしたか?

この回答への補足

早速のお返事有難うございます。
まず/.forwardのパーミッションは644にしています。
~/は755です。
perlのパスは/usr/local/bin/perlで確認OKです。


起動させるスクリプトは、
【mail.cgi】 ---------------------------------------
#!/usr/local/bin/perl

$mail = "./data/mail.log";

print "Content-type:text/html\n\n";

#ここらへんにメールアドレスのヘッターを読み込み送信元メールアドレスを
#取得する記述??

if(!open(OUT,">>$mail"))
{print 'ファイルへの書込みができませんでした。',"\n"; exit;}

print OUT "取得したメールアドレス,¥n";

close(IN);
exit
------------------------------------------------------------------
こんな感じなんですが、~/.forward に関係する記述と、送られてきたメール
内容のヘッターからメールアドレスを取得する方法がわかりません。
とりあえずcgiのパーミッションは705でmail.logは606です。

補足日時:2001/06/12 17:41
    • good
    • 0

えっと、それはCGIじゃなくて単なるスクリプトのような


.forwardはsendmail系の設定です。
あなたが書いてる設定だと
メールが送られてくるとパイプを開いて/home/user/scriptていう
プログラムにメールのデータを流し込むって感じになってます。
メールのフォーマットについては・・・覚えてないっす検索してみてくだささい(^^;
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qperlの1行目が#!/usr/bin/perlだと動かず#!/usr

perlの1行目が#!/usr/bin/perlだと動かず#!/usr/bin/perl5.8.9だと動くのですが、
#!/usr/bin/perlで動くようにするにはどうしたらいいのでしょうか?

インストールされているperlは
This is perl, v5.8.9 built for darwin-2level
です。

どこかでパスの設定をしてやればいいと思うのですが、
どこに何を書けばいいのかよくわかりません。

環境はMacOsX v10.6 SnowLeopardです。
どなたかよろしくお願いいたします。

Aベストアンサー

MacOSのことはよくわかりませんが、一般的なUNIX系OSで考えると、、

シンボリックリンク/usr/bin/perlを作り、/usr/bin/perl5.8.9にリンクすればいいでしょう。
ln -s /usr/bin/perl5.8.9 /usr/bin/perl

そうすればPerlスクリプトは「#!/usr/bin/perl」のままでOKです。

QActivePerlで#!/usr/bin/が無効

WindowsXPにActivePerl(5.16.3.1603)をインストールして、
コマンドラインに「perl script.scr」と入力して
スクリプトファイルは実行できるのですが、
スクリプトファイルの1行目に「#!/usr/bin/perl」を記述して、
コマンドラインに「script.scr」と入力して実行しようとすると、
「C:\・・・\script.scrは有効なWin32アプリケーションではありません。」
というメッセージが表示されて正しく実行できません。

perl.exeのあるフォルダをC:\usr\binフォルダにして、
1行目を
#!/usr/bin/perl
#!C:/usr/bin/perl
#!C:\usr\bin\perl
などいろいろ試してみましたが、どれも
前述のメッセージが表示されて実行できませんでした。
コマンドラインに「script.scr」と入力するだけで
実行することができるようにするには
どのようにすればいいのでしょうか。

script.scrの拡張子scrをplなどに変更して
この拡張子のファイルに対してperl.exeに関連付けることにより
script.plだけでも実行できるようにはなりますが
拡張子.scrではこの関連付けができませんので
#!/usr/bin/perl等を使用する方法で解決したいです。

ジャンクションとかApacheなどが全く分かりませんので
これらを使わずに簡単にできる方法がありましたら教えてください。
(なお使っても分かりやすい手順があれば可です)
よろしくお願いします。

WindowsXPにActivePerl(5.16.3.1603)をインストールして、
コマンドラインに「perl script.scr」と入力して
スクリプトファイルは実行できるのですが、
スクリプトファイルの1行目に「#!/usr/bin/perl」を記述して、
コマンドラインに「script.scr」と入力して実行しようとすると、
「C:\・・・\script.scrは有効なWin32アプリケーションではありません。」
というメッセージが表示されて正しく実行できません。

perl.exeのあるフォルダをC:\usr\binフォルダにして、
1行目を
#!/usr/bin/perl
#!C:/usr/bin/perl
...続きを読む

Aベストアンサー

ファイルの先頭を見て、#!だったらその行を実行コマンドとして実行、というのは、Unix系OSの機能です。
Windowsでは使えません。
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90%E3%83%B3_%28Unix%29

scr は、たしか、Windowsのスクリーンセーバー用に使われていたと思います。
どうしてもscrのままで、となると難しいと思います。

BATファイルに埋め込んで、shebang風に使う、という方法はあるのですが。
Windows shebangで検索するといくつか見付かります。

Q#!/usr/local/bin/perl

とPerlのCGIの先頭に書きますが
FedoraCore3でPerlを使うときにはどのように書けばよいのでしょうか?

Aベストアンサー

#!/usr/bin/perl

でしょうか。FedoraCore3は私は使っていませんが、cgiの先頭に書くのは、perlへのパスになるので、もしターミナルが使える状況なら

which perl

で得られるパスを #! につづけて書けばOKです。

Q「  」が表示されません

「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。

こんな感じ
------------main.cgi------------
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
print <<EOM;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title></title>
</head>
<body>
<略>
</body>
</html>
EOM
__END__
--------------------------------

それで、ほかのHTMLファイルに
<!--#exec cgi="main.cgi" -->
と入力してそのページを見てみると、
[an error occurred while processing this directive]
上の文章が表示されていました。
どうすれば「main.cgi」の内容を表示することができるのでしょうか?

よろしくお願いします。

「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。

こんな感じ
------------main.cgi------------
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
print <<EOM;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title></title>
</head>
<body>
<略>
</body>
</html>
EOM
__END__
...続きを読む

Aベストアンサー

Apacheの設定が
IncludesNoExec
だとSSIでexecは使えなくなるのでその設定がされているのではないでしょうか。
<!--#include virtual="main.cgi" -->
ではどうでしょうか。

Q#exec cgi="**.cgi"をCGIページで表示する

#exec cgi="**.cgi"
を使って、全ページが同じように表示されるようにしたのですが、
掲示板等のCGIページではなぜか表示されず、ソースを見てみると
<!--#exec cgi="**.cgi"-->
がそのまま表示され、ただコメントとして扱われていました。
普通のHTMLファイルと同じように
CGIでも**.cgiファイルを表示したいのですが、どうすればいいのでしょうか

よろしくお願いします。

Aベストアンサー

CGIの中でしたら
include
または
require
で呼び出せばいいかと思います。


このカテゴリの人気Q&Aランキング

おすすめ情報