CGIのフォームメール送信で内容が全部からになっちゃいます・・・。

[上に] [前に] [次に]
ひで [E-Mail] [HomePage] 2000/04/03(月) 06:27:10
過去ログをみたのですがいまいちわからなかったので新規投稿します。
ここでいただいたフォームメール送信CGIをつかってテスト投稿したところ何度やってみても空のメールしか届きません。
CGI自体は動いているようです。センドメールのパスもあっていますしどうしてなのかわからずに困り果ててます。そのファイルのアドレスはhttp://www.interq.or.jp/soccer/hideto/html/mail/wwwmail.htmlです。助言をお願いします。

ひで 2000/04/03(月) 06:30:26
上記のファイルのアドレスはhttp://www.interq.or.jp/soccer/hideto/html/mail/wwwmail.htmでした、すいません。こちらが正しいです。

ひで 2000/04/03(月) 06:42:10
何回も付け加えてすいません。で、htmファイルや、CGIファイルをみてみたんですが、どこでまちがっているかがわかりません。多分テキストフィールドの名前の指定なのじゃないかとは思うのですが・・・。
初心者ですので、わかりやすくお願いします。

ひで 2000/04/03(月) 06:51:23
CGIのファイル内容も書いておきます。お願いします。plファイルは何も変更を加えていません。

#
# ライブラリの呼び出し
#
require $jcode;
require $mimew;

#
# 入力値を読み取る
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@a = split(/&/, $query_string);
foreach $x (@a) {
($name, $value) = split(/=/, $x);
$name =~ tr/+/ /;
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*name, "jis");
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$value =~ s/[\r\n]+/\n/g;
&jcode'convert(*value, "jis");
if ($FORM{$name} eq "") {
$FORM{$name} = $value;
$FORM[$cnt++] = $name;
} else {
$FORM{$name} .= (" " . $value);
}
}
}

#
# EMAILが指定されていなければ、(unknown)とする。
#
if ($FORM{'EMAIL'} eq "") {
$FORM{'EMAIL'} = "(unknown)";
}

#
# メールヘッダを作成する
#
{
&jcode'convert(*subject, "jis");
$mailhead  = "To: $mailto\n";
if ($FORM{'EMAIL'} ne "(unknown)") {
$mailhead .= "Cc: $FORM{'EMAIL'}\n";
}
$mailhead .= "From: $FORM{'EMAIL'}\n";
$mailhead .= "Subject: $subject\n";
$mailhead .= "\n";
}

#
# メールボディを作成する
#
{
for ($i = 0; $i < $cnt; $i++) {
$mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n";
}

# "." のみの行は ". " に変換する。
# 2回繰り返さないと、2行連続で "." のみの行に対応できない
# "." を ".." に変換する処理が一般的だそうだが、あえて、
# "." を ". " に変換する。
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;
}

#
# メールを送信する
#
if (-x $sendmail) {
unless (open(OUT, "| $sendmail -n -t")) {
    &errexit("メールの送信に失敗しました。");
}
unless (print OUT &mimeencode($mailhead)) {
    &errexit("メールの送信に失敗しました。");
}
unless (print OUT $mailbody) {
    &errexit("メールの送信に失敗しました。");
}
close(OUT);
}

#
# ブラウザ画面に送信結果を書き出す
#
{
&jcode'convert(*header, "jis");
&jcode'convert(*footer, "jis");

$mail = $mailhead . $mailbody;
&jcode'convert(*mail, "euc");
$mail =~ s/&/&amp;/g;
$mail =~ s/"/&quot;/g;
$mail =~ s/</&lt;/g;
$mail =~ s/>/&gt;/g;
$mail =~ s/\n/<BR>/g;
&jcode'convert(*mail, "jis");

print "Content-type: text/html\n";
print "\n";
print "$header\n";
print "$mail\n";
print "$footer\n";
}

#
# エラーメッセージを出力して終了
#
sub errexit {
$msg  = "<HTML>\n";
$msg .= "<HEAD>\n";
$msg .= "<TITLE>メール送信結果</TITLE>\n";
$msg .= "</HEAD>\n";
$msg .= "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
$msg .= "メールの送信に失敗しました。\n";
$msg .= "ブラウザの [戻る] ボタンで戻ってください。\n";
$msg .= "</BODY>\n";
$msg .= "</HTML>\n";

&jcode'convert(*msg, "jis");

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

exit(0);
}

2000/04/03(月) 09:07:29
interQはcgiwrapを使っているため、CGIが別サーバで動くようになってるみたいです。
なので、HTMLのほうの呼び出しは、
<form method=POST action="wwwmail.cgi"> ではなく
<form method=POST action="http://cgi.members.interq.or.jp/soccer/hideto/html/mail/wwwmail.cgi">
にしたほうが、動作が速いはずです。(そのままでもいちおう動きますけど)
interQはけっこう特殊らしくて、このラウンジでもいくつか質問が出てるみたいなので、
「interQ」をキーに検索してみたら、同様の問題があるかもしれません。
ちなみに、こういうのを見つけました。

../200002/00020390.htm
解決のヒントになるといいのですが。
(すみません、利用していないプロバイダなので、これ以上はわかりません。)

notio [E-Mail] [HomePage] 2000/04/03(月) 21:36:46
関係ないかもしれないんですけど・・・
ソースを見ると、
><input type=submit value=" 送信 " Click="f=1"name="submit">
となっていて、Click="f=1"とname="submit"の間に、
スペースが入ってないんですけど、
関係ないでしょうか?
CGIのほうは、詳しくないので分らないのですが・・・

ひでと 2000/04/03(月) 23:05:58
レスありがとうございます。
レスを参考にもう一度試してみますね。
また報告します。

[上に] [前に] [次に]