記事No | : 9701 |
投稿日 | : 2011/11/22(Tue) 14:51:48 |
タイトル | : Web Mart 2.73 メールの送信について |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
度々申し訳ありません。
WebMartで注文を確定させると、メールは送信されず、500 Internal Server Errorが発生してしまいます。サーバー側の情報を確認すると、「契約者以外にメールを送ることはできません」とあるので、注文者あてのメールがいけないのであろうと、注文者のsendmail部分について以下の通りコメントアウトしました。ところが、まだ500エラーが発生してしまいます。
似たようなディレクトリに同じくsendmailを利用するcgiがありますが、こちらの方は作動しているので、sendmailに対応していないということではなさそうです。
+++order.cgi 557行から
# sendmailコマンド
my $scmd1 = "$cf{sendmail} -t -i";
# my $scmd2 = "$cf{sendmail} -t -i";
if ($cf{sendm_f} == 1) {
$scmd1 .= qq| -f $in{email}|;
# $scmd2 .= qq| -f $cf{master}|;
}
# 管理者へ送信
open(MAIL,"| $scmd1") or &error("メール送信失敗");
print MAIL "To: $cf{master}\n";
print MAIL "From: $in{email}\n";
print MAIL "$mhead\n";
print MAIL "$mbody1\n";
close(MAIL);
# 注文者へ送信
# open(MAIL,"| $scmd2") or &error("メール送信失敗");
# print MAIL "To: $in{email}\n";
# print MAIL "From: $cf{master}\n";
# print MAIL "$mhead\n";
# print MAIL "$mbody2\n";
# close(MAIL);
+++
記事No | : 9708 |
投稿日 | : 2011/11/23(Wed) 08:48:22 |
タイトル | : Re: Web Mart 2.73 メールの送信について |
ID情報 | : kent |
投稿者 | : KENT |
> 度々申し訳ありません。
> WebMartで注文を確定させると、メールは送信されず、500 Internal Server Errorが発生してしまいます。サーバー側の情報を確認すると、「契約者以外にメールを送ることはできません」とあるので、注文者あてのメールがいけないのであろうと、注文者のsendmail部分について以下の通りコメントアウトしました。ところが、まだ500エラーが発生してしまいます。
>
> 似たようなディレクトリに同じくsendmailを利用するcgiがありますが、こちらの方は作動しているので、sendmailに対応していないということではなさそうです。
>
> +++order.cgi 557行から
>
> # sendmailコマンド
> my $scmd1 = "$cf{sendmail} -t -i";
> # my $scmd2 = "$cf{sendmail} -t -i";
> if ($cf{sendm_f} == 1) {
> $scmd1 .= qq| -f $in{email}|;
> # $scmd2 .= qq| -f $cf{master}|;
> }
>
> # 管理者へ送信
> open(MAIL,"| $scmd1") or &error("メール送信失敗");
> print MAIL "To: $cf{master}\n";
> print MAIL "From: $in{email}\n";
> print MAIL "$mhead\n";
> print MAIL "$mbody1\n";
> close(MAIL);
>
> # 注文者へ送信
> # open(MAIL,"| $scmd2") or &error("メール送信失敗");
> # print MAIL "To: $in{email}\n";
> # print MAIL "From: $cf{master}\n";
> # print MAIL "$mhead\n";
> # print MAIL "$mbody2\n";
> # close(MAIL);
>
> +++
単純に、注文者へのメール送信をやめるには上記の修正でいいと思います。
sendmailの引数は、サーバ側では指定されているのでしょうか?
(上記のソースでは、-t -i -f が使用されている)
記事No | : 9712 |
投稿日 | : 2011/11/23(Wed) 14:26:18 |
タイトル | : Re^2: Web Mart 2.73 メールの送信について |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
KENTさん、ありがとうございます。
sendmailの引数は特に指定されていないようです。以下のように-t -i -fなど削除した方がよろしいでしょうか。
> # sendmailコマンド
> my $scmd1 = "$cf{sendmail}";
> # my $scmd2 = "$cf{sendmail}";
> if ($cf{sendm_f} == 1) {
> $scmd1 .= qq| -f $in{email}|;
> # $scmd2 .= qq| -f $cf{master}|;
> }
記事No | : 9713 |
投稿日 | : 2011/11/23(Wed) 17:17:38 |
タイトル | : Re^3: Web Mart 2.73 メールの送信について |
ID情報 | : kent |
投稿者 | : KENT |
> KENTさん、ありがとうございます。
> sendmailの引数は特に指定されていないようです。以下のように-t -i -fなど削除した方がよろしいでしょうか。
引数についてはサーバによるので分からないですね。
ちなみに、postmailなど他のプログラムでsendmailを利用するものは動作しますか?
記事No | : 9722 |
投稿日 | : 2011/11/24(Thu) 09:45:36 |
タイトル | : Re^4: Web Mart 2.73 メールの送信について |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
KENTさん、ありがとうございます。
試しに削除して動かしてみましたが、やはりエラーが出てしまいました。ちなみに同じサーバーにあるプログラムではメールの発信は出来ています。プログラム(sendmail部分)は以下のようになっています。
sub sendmail {
if (!open(OUT,"| $sendmail $mailto")) { &send_error; }
print OUT 'X-Mailer: WebFORM v1.1 (c)rescue@ask.or.jp' ."\n";
print OUT "To: $mailto\n";
print OUT "From: $email\n";
print OUT "Subject: $subject\n";
print OUT "Content-Transfer-Encoding: 7bit\n";
print OUT "Content-Type: text/plain\n";
print OUT "\n\n";
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
print OUT "DATE : $date_now\n";
print OUT "REMOTE_HOST : $host\n";
print OUT "REMOTE_ADDR : $addr\n";
print OUT "HTTP_USER_AGENT : $ENV{'HTTP_USER_AGENT'}\n";
print OUT "----------------------------------------------------\n\n";
foreach (0..$count-1) {print OUT "$DATA_N[($_)] = $DATA_V[($_)]\n"; }
print OUT "\n";
print OUT "----------------------------------------------------\n";
close(OUT);
print "Location: $location\n\n";
exit;
}
記事No | : 9733 |
投稿日 | : 2011/11/26(Sat) 09:56:04 |
タイトル | : メール送信の問題ではありませんでした |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
ほかのプログラムで動作確認したところ、特にsendmailでは問題は発生しませんでした。また、禁止とされている契約者以外への発信も可能でした。
ということで、order.cgiをオリジナルに戻し、再挑戦したところ、以下エラーが発生しました(「確定注文する」ボタンを押した後)。それまで正常に動いているということは、前半のorder.cgiは動いていてsendmailのサブルーチンに動いてからエラーが発生しているということでしょうか。
500 Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@mediamix.ne.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
記事No | : 9735 |
投稿日 | : 2011/11/26(Sat) 19:00:33 |
タイトル | : Re: メール送信の問題ではありませんでした |
ID情報 | : kent |
投稿者 | : KENT |
> ほかのプログラムで動作確認したところ、特にsendmailでは問題は発生しませんでした。また、禁止とされている契約者以外への発信も可能でした。
> ということで、order.cgiをオリジナルに戻し、再挑戦したところ、以下エラーが発生しました(「確定注文する」ボタンを押した後)。それまで正常に動いているということは、前半のorder.cgiは動いていてsendmailのサブルーチンに動いてからエラーが発生しているということでしょうか。
>
> 500 Internal Server Error
> The server encountered an internal error or misconfiguration and was unable to complete your request.
> Please contact the server administrator, webmaster@mediamix.ne.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
>
> More information about this error may be available in the server error log.
サーバエラーだけだと分からないですね。
order.cgiの「sendmailコマンド」にて、適当な行の中に
&error;
という一文を入れ、どの行でエラーが発生しているのかの切り分けをすれば解明の糸口になるかもしれません。
記事No | : 9739 |
投稿日 | : 2011/11/27(Sun) 01:51:53 |
タイトル | : Re^2: メール送信の問題ではありませんでした |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
KENT様
なるほど、ありがとうございます。さっそく確認したところ、419行目でエラーが発生することがわかりました。この直前までは動いています。
# メール件名をMIMEエンコード
my $msub = Jcode->new("ご注文メール ($in{name}様)")->mime_encode;
ちなみにレンタルサーバーのPerlのバージョンを調べたところ、5.00503 でした。
記事No | : 9741 |
投稿日 | : 2011/11/28(Mon) 08:23:30 |
タイトル | : MIME Encodeの問題の様です |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
色々といじってみましたが、どうもMIME Encodeで問題が発生するようです。仮にMime Encodeをしないで、単純に件名を$msubに代入して動かすと、あとは問題なく作動しました(受領したメールの件名は文字化けします)。
my $msub = Jcode::mime_encode([\$msub2]);
もトライしてみましたが、エラーになってしまいます。
何とかほかの方法で件名をMIME Encodeする方法はないでしょうか?
Perlのバージョンが低いとかの問題でしょうか?
記事No | : 9744 |
投稿日 | : 2011/11/28(Mon) 20:33:22 |
タイトル | : Re: MIME Encodeの問題の様です |
ID情報 | : Fuyuki |
投稿者 | : BAL |
URL | : http://www26.tok2.com/home/sumire1100/ |
昔の方法に戻せばどうでしょうか。
# メール件名をMIMEエンコード
my $msub = &base64("ご注文メール ($in{name}様)");
#-------------------------------------------------
# BASE64変換
#-------------------------------------------------
sub base64 {
my($sub) = @_;
Jcode::convert(\$sub, 'jis', 'sjis');
$sub =~ s/\x1b\x28\x42/\x1b\x28\x4a/g;
$sub = "=?iso-2022-jp?B?" . &b64enc($sub) . "?=";
$sub;
}
sub b64enc {
my($ch)="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
my($x, $y, $z, $i);
$x = unpack("B*", $_[0]);
for ($i=0; $y=substr($x,$i,6); $i+=6) {
$z .= substr($ch, ord(pack("B*", "00" . $y)), 1);
if (length($y) == 2) {
$z .= "==";
} elsif (length($y) == 4) {
$z .= "=";
}
}
$z;
}
記事No | : 9751 |
投稿日 | : 2011/11/29(Tue) 12:05:26 |
タイトル | : ありがとうございました(解決しました) |
ID情報 | : pteron |
投稿者 | : pteron |
URL | : http://cgi.mediamix.ne.jp/~k3205/user-cgi/mart/order.cgi |
BAL様
ありがとうございます。
ご教示いただいた方法で解決いたしました。
それにしてもレンタルサーバーのPerl、古いですね・・・