[PHP-users 8328] Re: PHP4.2.1とPHP4.1.2 でのmb_send_mail関数について

KOYAMA Tetsuji php-users@php.gr.jp
Thu, 27 Jun 2002 23:45:18 +0900


  小山です。


At Thu, 27 Jun 2002 14:17:36 +0900,
HIRANO Nobuaki wrote:
> PHPのメール送信関係の関数で一行の文字数制限を準拠するようになったのか、
> その辺の情報を検索してみたのですが見当たりませんでした(-_-;

  まずは結論から。
  私もソースを追いかけてみましたが、そのような処理をしているところはあ
りませんでした。そこで簡単なテストを書いて実証してみました。

<?php
$to = 'put_your_address@example.com';
$subject = 'long message test';
$message = st_repeat('.', 1000);

echo "mail sending....";

$status = mb_send_mail($to, $subject, $message);
// $status = mail($to, $subject, $message);

if ($status)
  echo " done\n";
else 
  echo " fail\n";

?>

すると、mail(), mb_send_mail() 両者で $message は改行されることなく送信
されました。ということで

> 実験:一行に1000バイトの文字を入れてmb_send_mail関数およびmail関数で、
>    その文章を送信する
> 
> PHP4.1.2
> mb_send_mail関数:そのまま送れる(2000バイトでもOK)
>         mail関数:そのまま送れる(2000バイトでもOK)
> 
> PHP4.2.1
> mb_send_mail関数:990バイト付近から強制的に改行され文字化けする
>         mail関数:990バイト付近から強制的に改行されるが文字化けしない。
> 		 ただし2000バイトの文字を送信した場合、1980バイト付近で改行
> された
>          次の行の1文字目が文字化けする。

この改行処理はは、実は MTA 側でやってたりしませんか? ちなみにこちらで
問題なかった MTA は postfix-20010228-pl05 (ちと古い(^^;) です。


  さて、以下はおまけ。

> PHPのスクリプトはShift_JISで書かれています。

  Shift_JIS で書かれたスクリプトを処理するためには、藤本パッチの当たっ
た PHP が必要ですがその辺は大丈夫でしょうか? (4.2.1 ではまだ藤本パッチ
は取り込まれていませんでしたよね。)

> いろいろ調べていると以下のような制限がRFCにてあることに気がつきました。
> ・一行の文字数制限などもある(RFC 821 で一行1000文字以内に制限)

  メール書式に関する現在の RFC は RFC 2822 です。見てみると CR LF を除
いて 998 文字を越えてはならないとありますね。

-- 
	小山 哲志@ビート・クラフト
	koyama@beatcraft.com
	koyama@hoge.org