プロが教える店舗&オフィスのセキュリティ対策術

現在、mod_perlを使ってサイトを構築しているのですが、その中で、sendmailを使ってメールを送信している処理が遅く困っています。

その処理が遅いため、画面へのHTML出力が遅くなっています。(HTML出力処理は、メール送信処理よりさきにやっているのですが・・)

下記は、ソースの該当部分です。
直接、sendmailに渡しているのですが、
この処理がいけないのでしょうか?
何か改善方法があるようであれば教えてください。

ちなみに、通常のCGIだとforkで、別プロセスを立てて
そのプロセスにメール送信をさせて、主プロセスは、HTML出力をさせることはできると思うのですが。
プロセスが常駐しているmod_perlでは、有効な手なのでしょうか。

--------------------------------------
open(SENDMAIL,"|/usr/lib/sendmail -t") or $err = 1;
if ($err == 0) {
print SENDMAIL $mail_body;
close(SENDMAIL);
$err_msg = "メール送信正常に処理しました。\n";
} else {
$err_msg = "メール送信エラー:ticket_cd:$$ref{ticket_cd}\n";
}
--------------------------------------

A 回答 (1件)

>その処理が遅いため、画面へのHTML出力が遅くなっています。


>(HTML出力処理は、メール送信処理よりさきにやっているのですが・・)

HTML出力後、バッファのクリアは行っていますか?

>forkで、別プロセスを立てて
>そのプロセスにメール送信をさせて、主プロセスは、HTML出力をさせることはできると思うのですが。
>プロセスが常駐しているmod_perlでは、有効な手なのでしょうか。

forkはmod_perl環境下でも有効なはずですが、それよりはさっさとstdoutをcloseしてしまったほうが良いと思います。
(複数通送るならforkの方が良いですが)

$|=1;print "\n";close (STDOUT);
#もちろん、これ以降はstdoutへの出力はできません。
    • good
    • 0
この回答へのお礼

zebedeerさんが書かれた内容で、困っていた問題が解決しました。有難う御座います。
ところで、zebedeerさんは、システム開発の経験はどの程度おありなのでしょうか?
今、私個人で開発しているシステムがあり、宜しければ手伝ってほしいのですが。
謝礼は、システム稼動後の成果に応じた形で差し上げたいと思います。
ご自身の仕事等が忙しいようであれば、この申し出は無視して頂いて差し支えありません。

お礼日時:2004/08/31 14:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!