※社内専用

CGIを使ったメール送信フォームの502エラー解消方法

  • HOME
  • EPRESS-EC
  • CGIを使ったメール送信フォームの502エラー解消方法

条件

・ROOK案件
・フォームでcgi使用
・送信完了画面が表示されるときに502エラー発生
※メール自体は送信できている

作業内容

IT統括へ依頼していたのですが対処法が共有されたため、下記方法で試してみて解消されなかった場合は「Skyberry サービス関連問い合わせ」から問い合わせの流れになります。
※cgiファイルは直接アクセスすると正常であってもエラーになることがあるそうなので、必ずバックアップを取ってローカルで修正作業しましょう。
どのパターンで直してもダメな場合、改行コードがLFになっているか確認してください。CRLFの場合はLFに変更です。

 

パターン1

【パターン1】form2mail.cgiファイル使用の場合   /cgi-bin/form2mail.cgiファイルの中身を2か所修正します。
①修正前:open(MAIL,"|/usr/lib/sendmail -t");
 修正後:open(MAIL,"|/usr/lib/sendmail -t >/dev/null 2>&1");

②修正前:open(REPLY,"|/usr/lib/sendmail -t");
  修正後:open(REPLY,"|/usr/lib/sendmail -t >/dev/null 2>&1");

パターン2

【パターン2】clipmail.cgiファイル使用の場合(kent-web)   init.cgiファイル内にある設定を2か所変更します。
①$send_typeを「1」から「2」に変更
# メール送信形式
# 1 : sendmail送信(sendmailが利用可能なサーバ)
# 2 : IO:Socketモジュール送信(ソケット関連のモジュールが利用可能なサーバ)
$send_type = 2;

②$serverを「mail.server.xx.jp(ダミーのもの)」から「localhost」に変更
# SMTPサーバ
$server = "localhost";

パターン3

【パターン3】postmail.cgiファイル使用の場合(kent-web)   postmail.cgiファイルの中身を2か所修正します。
①本文送信のところに「 >/dev/null 2>&1」を追加する
# 本文送信
open(MAIL,"| $scmd >/dev/null 2>&1") or &error("メール送信失敗");
print MAIL "$body\n";
close(MAIL);

②返信送信のところに「 >/dev/null 2>&1」を追加する
# 返信送信
if ($cf{auto_res}) {
my $scmd = $cf{send_fcmd} ? "$cf{sendmail} -t -i -f $cf{mailto}" : "$cf{sendmail} -t -i";

open(MAIL,"| $scmd >/dev/null 2>&1") or &error("メール送信失敗");
print MAIL "$res_body\n";
close(MAIL);
# 本文送信 のコードにも「-t -i」が含まれている場合はopen(MAIL,"| $scmd >/dev/null 2>&1 -t -i") or &error("メール送信失敗");のように含めてみください。

 

経緯

「CGIのHTTPステータスの返し方が不適切(明示的にステータスを返していない、など)」ことが原因とIT統括から返信を受けている現象です。
原因はおおまかに言うとサーバーの環境によるものです。
以前xaas.jpからxaas3.jpへ一斉にサーバー移行が行われました。
移行自体は正常に行われましたが、セキュリティ環境に若干の違いがありcgiに関してエラーが出ることがあることが後にわかったそうです。
案件にもよるため現象が起きた際にIT統括へ依頼ということになっていたそうです。
(事前にわかる事ではなくIT統括のせいとも言えないですが、もちろん制作部のミスではありません・・・)