M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2004年4月 6日 00:30

perlのNet::SMTPモジュールは改行コード混在は処理できないようだ

このエントリーをはてなブックマークに追加 mixiチェック

perl の Net::SMTP モジュールを使ってメールを送信するスクリプトを作るうえでの注意点。

フォームに入力した文書をメールで送信するスクリプトを稼働しているのだけれども、時々送信に失敗するきらいがあって、どうしてなんだろうと頭を悩ましてきた。

SMTPサーバがスリープに入っていて、応答できないからかな(事実メールサーバが調子悪いときもあった)? とか、ネームサーバが死んでいるからかな(事実DNSがおかしいときも)? とか、色々考えてみたんです。

特定のパターン失敗する傾向があるようなので、失敗したとき、メールの元になる文書をためておくようにスクリプトを書き換えておいて、少し待ってみたところ、何件か失敗例がたまってきた。

内容を読んでみると……

今の仕組みで、これが起こるケースは、MacIE5で、formで<textarea></textarea>で生成されるテキストボックス内で、改行を連続させたとき、のようだ。

どうやら、perlスクリプト内で、固定文字列と、フォームの内容を足し合わせているのだけれども、固定文字列は、スクリプト内に定数として入っているので、改行コードがLF、フォームの内容の方は、ブラウザの使用環境によるので、改行コードはまちまち(失敗するのは主にCR+LF)。これが悪いらしい。

即席でスクリプトを仕立てて試してみると、Net::SMTP は、送信する文書に異なる改行コードが混ざっていると、「送信できない」「エラーコードを返す」ようだ

これはなかなか気付かなかった。
うまくいかない例って、1.Webを探してもなかなか見つからないんですよね。2.動作テストってプログラムした人間はしきれないもんですね。

んで、こうした。

$comment =~ s/\r\n/\n/g;
$comment =~ s/\r/\n/g;

長い間悩んで来た割に、解決法はたったこれだけ。バグとりなんて、こんなもん。

投稿 大野 義貴 [パソコン・インターネット] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/36

コメントする