CGI-BBS > SO−HO > ショッピングバスケット > ショッピングバスケットで、注文メールを自動送受信できない。


カレッヂ
カレッヂ


質問者 はる2  投稿日 3/11(火) 23:16:30
ショッピングバスケット・プロv6を使用しています。
3月からプロバイダーが下記のようなバージュンアップを行いました。
この為、受注メールの自動送受信が出来なくなりました。
cart.cgiを改造する必要があると思うのですが、何処をどういじればメールの
送受信が出来るようになるのか分かりません。
どなたか分かる方ご教授ください。

■ sendmailのバージョンアップ

メール送信に利用しておりますプログラム「sendmail」にセキュリティーホールが発見されました。
その為、弊社で利用しておりますすべての「sendmail」に対してセキュリティーホールを塞ぐ対処を行い、
レンタルサーバに対してはパッチを適用し、その他は、最新の"8.12.8"にバージョンアップを行いました。

自作のCGIを設置のお客様でsendmailを利用されているお客様はプログラムを再度ご確認ください。

プロバイダ参照:http://www.ipc-tokai.or.jp/support/cgi/index.html
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:ワードパッド
FTPソフト:NextFTP
サーバ移転:していない
改造:していない
CGI習熟度:middle

回答者 TIP  [削除]  投稿日 3/12(水) 01:13:24
便乗になりますが、私の所でも同じような現象が起きています。

レンタルサーバのsendmailが8.12.8にアップデートされたとたんに、
ショッピングバスケットプロ_3.43で同じ不具合がでました。

rescueさんのものではないメール送信スクリプトも同じように不具合がでたのですが、
そちらの方はsendmailを叩くコードの所で、
-t -oi というオプションがあり、-oiを削除する事で正常に動作するようになりました。

サーバのsendmailのアップデートを境に不具合が発生したので、
メール送信関係が関係してるとは分かるのですが、
動くプログラムと動かないプログラムがあるので、
サーバ側のsendmailの設定が悪いのか、それともプログラム側に不具合があるのか、
判断しかねています。

どなたか分かる方ご教授願います。
回答者 呑兵衛@大阪  [削除]  投稿日 3/13(木) 18:41:34
> 受注メールの自動送受信が出来なくなりました。
> ショッピングバスケットプロ_3.43で同じ不具合がでました。

これらの現象はどういう形で現れるのでしょう?
質問で一番肝心な部分ですので具体的に書くとわかりやすいのですが。
たとえば、送信ボタンを押した直後に Internal Server Error が表示された、とか、、、。

察するにフラグに問題が関連している気がします。
sendmail.org ではこの点のレポートが見つかりませんでしたので、
以下のプログラムを実行してみてください。
見慣れたスクリプトと違う点は、 pipe 時に
$sendmail -t $to_mail のように -t フラグに続けて送信先アドレスを明示し、
ヘッダー行から抜いているだけで、後は進行具合に応じてメッセージを拾うようにしています。
送信に成功したら画面上に 送信完了 とだけ表示され、宛先にメールが届いているはずです。
sendtest.cgi permition 755
-------------------------------------
#!/usr/local/bin/perl

$sendmail  = '/usr/sbin/sendmail';
$to_mail   = '送信先address';
$from_mail = '送信元address';
$subject   = 'Test';
$body      = 'This is Test Mail';

if(!open OUT, "| $sendmail -t $to_mail") {
    Message('Sendmail の起動失敗');
} elsif(!print OUT "From: $from_mail\nSubject: $subject\n\n$body") {
    Message('Sendmail が送信拒絶');
} elsif(close OUT) { # 終了ステータス $? が 0 のときに真
    Message('送信完了');
} elsif($? == 75<<8) { # 終了ステータスのビット演算
    Message('多分配信遅延'); # キューに落ちた場合
} else {
    Message("コード $? で送信失敗!");
}

sub Message {
    local ($status) = @_;
    print "Content-type: text/html; charset=shift_jis\n\n";
    print "<html><head><title></title></head><body>\n";
    print "$status\n";
    print "</body></html>\n";
    exit;
}
質問者 はる2  [削除]  投稿日 3/13(木) 19:55:27
仰る通り!
-tフラグに続けて送信先アドレスを明示してやれば解決しました。
呑兵衛@大阪さんありがとうございます。呑兵衛@大阪様様です!
今はとりあえずファイルに注文データ詳細を書き出すようにプログラムを改造して
手動でお客さんにメール送信していたのですが、これでそのような煩雑な処理から
開放されます。

多分TIPさんも同じ様にすれば解決するのでは?

ちなみにこちらの不具合の現象は、「注文の一連の処理は何のエラー表示もされず
終了するのですが、メールの送受信だけがされない(エラー表示なし)」
と言うものです。
呑兵衛@大阪さんのプログラムを実行するとちゃんと送信終了と表示されメール配信
されました。

具体的プログラムの修正箇所は、cart.cgiのずーっと下の方の「オーダー処理」中の

if (!open(OUT,"| $sendmail -t")) { &error("異常停止",$!); }
→if (!open OUT,"| $sendmail -t $mailto_order") { &error("異常停止",$!); }
ともう一箇所
if (!open(OUT,"| $sendmail -t")) { &error("異常停止",$!); }
→if (!open OUT,"| $sendmail -t $in{'_email'}") { &error("異常停止",$!); }
で良くなります。

ほんとうに、どうもありがとうございます。

返信(回答)する

 


Web裏技