network.mail.Mail->send バグ

どんなバグか?

Linux PHP5.2.0
rhaco の Mailクラスでメール送信したとき、本文(message)の1行目が空行になる。

<?php
require_once('rhaco/Rhaco.php');
Rhaco::import('network.mail.Mail');
:
$mail = new Mail($from);
$mail->to($to);
$mail->subject($subject);
$mail->message($message);
$mail->send();
?>

これで送信すると、1行目が必ず空行になります。

原因

PHP: mail - Manual の「例2 追加ヘッダを付加してメールを送信する」を参照

PHPのmail関数で送信してるのだが、mail関数の仕様では「ヘッダ項目をつなぐ区切り文字として改行をつかう」ということらしい。ヘッダ項目毎に改行としてるので、結果として1つ改行が多くなっており、それが空行になってしまっている。

修正

最後の改行を1つ削除してるだけです。

rhaco/network/mail/Mail.php(rev3131/3235)

    /**
     * メールを送信する
     *
     * @param string $subject
     * @param string $message
     * @return boolean
     */
    function send($subject="",$message=""){
        /*** #viewing */
        if (count($this->to) == 0) return false;
        if(!empty($subject)) $this->subject($subject);
        if(!empty($message)) $this->message($message);
//      return mail("",$this->_subject(),$this->_messages(),$this->_headers());
return mail("",$this->_subject(),$this->_messages(),preg_replace('/'.$this->eol.'$/','',$this->_headers()));
    }
    • -

2008-06-30追記
以下でfix
http://fixdap.com/p/rhaco/14327/