問い合わせフォームのcgiです。問い合わせ先にはきちんと届くのですが、問い合わせた側(ユーザー)に受付済みメールが届きません。下記にコードを記しますので、どこか間違っている箇所があれば教えていただけませんでしょうか? 宜しくお願いします。


#----ユーザ宛
if($FORM{'mail'} && $FORM{'usr'} eq "ON"){
$head = "To: $FORM{'mail'}\n";
$head .= "From: $FORM{'to'}\n";
$head .= "Subject: $sub\n";
$head .= "Content-Type: text/plain;\n\n";

$body = "";
if($FORM{'mes'} && (-e $FORM{'mes'})){
if(open(IN,"$FORM{'mes'}")){
local(@lines)=<IN>;
close(IN);
foreach $line (@lines){ $body .= "$line"; }
}
}
if($body){
$body =~ s/<!--INPUT-->/$cont/g;
}
else{
$body = $cont;
}

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;
$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

open(MAIL, "| $sendmail $FORM{'mail'}");
print MAIL $head;
print MAIL $body;
close(MAIL);
}

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/11/28 11:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:tukihatu No.1

回答回数180ベストアンサー獲得回数32

ポイント35pt

きちんと動いてますけど・・・

他の要因とケンカしてるのではないですか?

あと$sendmailが書いてなかったので、そこかもしれません。

$FORM{'mail'} = $FORM{'to'} = "test\@test.ne.jp";

$FORM{'usr'} = "ON";

$sub = "test";

$FORM{'mes'} = "test\ntest\n";

$mail_prog = '/usr/lib/sendmail';

$sendmail = "$mail_prog -t -f";

#----ユーザ宛(ここからそのままコピー)---

if($FORM{'mail'} && $FORM{'usr'} eq "ON"){

$head = "To: $FORM{'mail'}\n";

$head .= "From: $FORM{'to'}\n";

$head .= "Subject: $sub\n";

$head .= "Content-Type: text/plain;\n\n";

$body = "";

if($FORM{'mes'} && (-e $FORM{'mes'})){

if(open(IN,"$FORM{'mes'}")){

local(@lines)=<IN>;

close(IN);

foreach $line (@lines){ $body .= "$line"; }

}

}

if($body){

$body =~ s//$cont/g;

}

else{

$body = $cont;

}

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

open(MAIL, "| $sendmail $FORM{'mail'}");

print MAIL $head;

print MAIL $body;

close(MAIL);

}

#ここで質問ソースend

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

print "";

exit;

id:prato

ご回答有り難うございます。

う~ん、まだ原因不明なのですが、質問では文字数制限の関係でコード全文を書くことができなかったので

以下に記しますね。


#!/usr/bin/perl

$cgif = "./mailsend.cgi";

$custf = "./cust.cgi";

unless(-e $custf){ &error("共通設定ファイル [$custf] がオープン出来ません"); }

require $custf;

unless(-e $jcode){ &error("jcode.plがオープン出来ません"); }

require $jcode;

&form_get;

if($FORM{'subject'}){ $title = $FORM{'subject'}; }

if($FORM{'to'} eq ""){ $FORM{'to'} = $mastermail; }

if($FORM{'to'} eq ""){ &error("管理者メールアドレスが不明です"); }

unless(-e $sendmail){ &error("sendmailのパスが不正です"); }

&input_chk; #入力チェック

if($FORM{'look'} eq "ON"){ &input_look; } #入力データ確認

&mail_send; #メール送信

&thanks_disp; #送信後のメッセージ表示

exit;

#------------------------------#

# 入力フォームからデータを取得 #

#------------------------------#

sub form_get

{

$cnt = 0;

local($pair,$buff);

if($ENV{'REQUEST_METHOD'} eq "POST"){

read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});

}

else{

$buff = $ENV{'QUERY_STRING'};

}

local(@pairs) = split(/&/,$buff);

foreach $pair(@pairs){

local($name,$value) = split(/=/,$pair);

$value =~ tr/+/ /;

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

&jcode'convert(*value,'sjis');

if($name eq "look" || $name eq "to" || $name eq "subject" || $name eq "next"

|| $name eq "usr" || $name eq "mes"){

$FORM{$name} = $value;

}

else{

if($FORM{$name}){ $FORM{$name} .= (" " . $value); }

else{ $FORM{$name} = $value; $FORM[$cnt++] = $name; }

}

}

}

#--------------#

# 投稿チェック #

#--------------#

sub input_chk

{

local($i);

#----必須項目入力チェック

for($i=0; $i<$cnt; $i++){

local($val) = $FORM[$i];

local($com) = $FORM{$FORM[$i]};

if(substr($val,0,1) eq '_'){

$FORM[$i] = substr($val,1);

$FORM{$FORM[$i]} = $com;

if($com eq ""){

local($mes)=&nam_get($FORM[$i]);

&error("$mesを入力して下さい");

}

}

}

#----メールアドレスチェック

if($FORM{'mail'} && $FORM{'mail'} !~ /(.*)\@(.*)\.(.*)/){ &error("メールアドレスを正しく入力して下さい"); }

if($FORM{'mail'} && $FORM{'mail2'}){

if($FORM{'mail'} ne $FORM{'mail2'}){ &error("メールアドレスに誤りがあります"); }

}

}

#--------------------------#

# 項目に対する日本語名取得 #

#--------------------------#

sub nam_get

{

local($j);

local($nam)=$_[0];

local($mes)="";

for($j=0; $j<@name1; $j++){

if($nam eq $name1[$j]){

if($name2[$j]){ $mes=$name2[$j]; }

last;

}

}

if($mes eq ""){ $mes = $nam; }

return $mes;

}

#----------------#

# 入力データ確認 #

#----------------#

sub input_look

{

local($i);

&head_disp;

print "$confcom
\n";

print "$CONF_TBL1";

for($i=0; $i<$cnt; $i++){ #この$cntはグローバルです

if($FORM[$i] eq "mail2"){ next; }

local($val) = $FORM{$FORM[$i]};

if($val eq ""){ $val = " "; }

$val =~ s/</</g;</p>

$val =~ s/>/>/g;

$val =~ s/\r\n/
/g;

$val =~ s/\n/
/g;

$val =~ s/\r/
/g;

$val =~ s/\"/"/g;

$val =~ s/\0/ /g;

$str = $CONF_TBL2;

local($mes)=&nam_get($FORM[$i]);

$str =~ s//$mes/g;

$str =~ s//$val/g;

print "$str";

}

print "$CONF_TBL3";

print "<form action=$cgif method=post>\n";

print "<input type=hidden name=to value=\"$FORM{'to'}\">\n";

print "<input type=hidden name=subject value=\"$FORM{'subject'}\">\n";

print "<input type=hidden name=next value=\"$FORM{'next'}\">\n";

print "<input type=hidden name=usr value=\"$FORM{'usr'}\">\n";

print "<input type=hidden name=mes value=\"$FORM{'mes'}\">\n";

for($i=0; $i<$cnt; $i++){ #この$cntはグローバルです

if($FORM[$i] eq "mail2"){ next; }

$val = $FORM{$FORM[$i]};

$val =~ s/\"/"/g;

print "<input type=hidden name=\"$FORM[$i]\" value=\"$val\">\n";

}

print "<input type=submit value=\" 送信する \">\n";

print "</form>\n";

&foot_disp;

exit;

}

#------------#

# メール送信 #

#------------#

sub mail_send

{

local($i,$cont,$val);

#----タイトル

local($sub) = $FORM{'subject'};

if($sub eq ""){ $sub = $title; }

if($sub eq ""){ $sub = "no subject"; }

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

#----内容

$cont="";

for($i=0; $i<$cnt; $i++){

if($FORM[$i] eq "mail2"){ next; }

$FORM{$FORM[$i]} =~ s/"/\"/g;

$val = $MESS_CONT;

local($mes)=&nam_get($FORM[$i]);

$val =~ s//$mes/g;

$val =~ s//$FORM{$FORM[$i]}/g;

$cont .= "$val";

}

#----ユーザ宛

if($FORM{'mail'} && $FORM{'usr'} eq "ON"){

$head = "To: $FORM{'mail'}\n";

$head .= "From: $FORM{'to'}\n";

$head .= "Subject: $sub\n";

$head .= "Content-Type: text/plain;\n\n";

$body = "";

if($FORM{'mes'} && (-e $FORM{'mes'})){

if(open(IN,"$FORM{'mes'}")){

local(@lines)=<IN>;

close(IN);

foreach $line (@lines){ $body .= "$line"; }

}

}

if($body){

$body =~ s//$cont/g;

}

else{

$body = $cont;

}

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

open(MAIL, "| $sendmail $FORM{'mail'}");

print MAIL $head;

print MAIL $body;

close(MAIL);

}

#----管理者宛

if($FORM{'to'}){

local($mail) = $FORM{'mail'};

if($mail eq ""){ $mail = $FORM{'to'}; }

$head = "To: $FORM{'to'}\n";

$head .= "From: $FORM{'mail'}\n";

$head .= "Subject: $sub\n";

$head .= "Content-Type: text/plain;\n\n";

$val = $MESS_CONT;

$val =~ s//IP/g;

$val =~ s//$ENV{'REMOTE_ADDR'}/g;

$cont .= "$val";

$body = $cont;

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

$body =~ s/(^|\n)\.(\n|$)/$1. $2/g;

open(MAIL, "| $sendmail $FORM{'to'}");

print MAIL $head;

print MAIL $body;

close(MAIL);

}

}

#--------------#

# 送信後の表示 #

#--------------#

sub thanks_disp

{

if($FORM{'next'}){

print "Location: $FORM{'next'}\n\n";

exit;

}

else{

&head_disp;

print "$endcom
\n";

&foot_disp;

}

}

#--------------------#

# ヘッダ部分書き出し #

#--------------------#

sub head_disp

{

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

print "<html><head>\n";

print "<META http-equiv=Content-Type content=text/html; charset=Shift_JIS>\n";

print "<title>$title</title>\n";

print "$style_css\n";

print "</head>\n";

print "$body_str\n";

print "

\n";

}

#--------------------#

# フッタ部分書き出し

#--------------------#

sub foot_disp

{

print "

\n";

print "</body></html>\n";

exit;

}

#------------#

# エラー処理 #

#------------#

sub error

{

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

print "<html><head>\n";

print "<META http-equiv=Content-Type content=text/html; charset=Shift_JIS>\n";

print "$style_css\n";

print "<title>ERROR!</title>\n";

print "</head>\n";

print "$body_str\n";

print "

\n\n";

print "$_[0]

\n";

print "

\n";

print "</body></html>\n";

exit;

}



以上です。

宜しくお願いします。

2007/11/21 15:14:55
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント35pt

メールが届かないのにも

  • メールを送っていない
  • メールを送るのに失敗した
  • メールを受取ってもらえない

といろいろな状況があるので、一つ一つチェックしてみては?


まず送ろうとしているのか?

管理者宛のメールは、$FORM{'to'} が空でなければ送ってくれますが

ユーザ宛のメールは、$FORM{'mail'} が空でない事、かつ $FORM{'usr'} が "ON" である時に送ろうとします。

$FORM{'usr'} は入力チェックルーチンで明確にチェックされてはいませんが、チャンと値が入っていますかね?

このスクリプトにデータを送ってくるフォームがどの様に記述されているか不明ですが、「ユーザ宛」のコメント行の直後でこの値を表示するなりして確認してみてはどうでしょうか?


送っているか?

sendmail へ渡す文字列をそのままプリントしてみてチャンと(ユーザ宛と管理者宛の2回)出力されているでしょうか?


受け取ってもらえているか?

そのユーザ宛の単純な英文字だけのメールをcgiから送信して、受取ってもらえるますか?

逆引きできないアドレスや、正逆不一致のアドレスからは受取らないサーバもあるようですから。

  • id:t_shiono
    $FORM{'mail'}には何が格納されていますか?
    恐らく問合せ先のメールアドレスだと思うのですが、スクリプト上ではそこにしか送っていないですよね?

    別にスクリプトがありますか?
  • id:prato
    コメント有り難うございます。


    別にカスタマイズ用のスクリプトがあります。
    そのスクリプトには 'mail' はフォーム内のユーザー記入用アドレス(ユーザーのアドレスです)と繋がっている様に書かれています。 


    きちんと読み込めていれば、そちら宛にメールが飛ぶ、ということになっている様なのですが
    送られていない といった状況です。


    素人ですみません…。
    m(_ _)m

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません