#----ユーザ宛
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);
}
きちんと動いてますけど・・・
他の要因とケンカしてるのではないですか?
あと$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;
メールが届かないのにも
といろいろな状況があるので、一つ一つチェックしてみては?
まず送ろうとしているのか?
管理者宛のメールは、$FORM{'to'} が空でなければ送ってくれますが
ユーザ宛のメールは、$FORM{'mail'} が空でない事、かつ $FORM{'usr'} が "ON" である時に送ろうとします。
$FORM{'usr'} は入力チェックルーチンで明確にチェックされてはいませんが、チャンと値が入っていますかね?
このスクリプトにデータを送ってくるフォームがどの様に記述されているか不明ですが、「ユーザ宛」のコメント行の直後でこの値を表示するなりして確認してみてはどうでしょうか?
送っているか?
sendmail へ渡す文字列をそのままプリントしてみてチャンと(ユーザ宛と管理者宛の2回)出力されているでしょうか?
受け取ってもらえているか?
そのユーザ宛の単純な英文字だけのメールをcgiから送信して、受取ってもらえるますか?
逆引きできないアドレスや、正逆不一致のアドレスからは受取らないサーバもあるようですから。
ご回答有り難うございます。
う~ん、まだ原因不明なのですが、質問では文字数制限の関係でコード全文を書くことができなかったので
以下に記しますね。
#!/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 "
}
#--------------------#
# フッタ部分書き出し
#--------------------#
sub foot_disp
{
print "
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 "
print "$_[0]
\n";
print "
print "</body></html>\n";
exit;
}
以上です。
宜しくお願いします。