[PHP-users 24897] Re: PEAR::Mail で添付ファイル付きメールが送れません。

shima tetuo mlmlml @ lily.freemail.ne.jp
2005年 3月 16日 (水) 01:28:28 JST


tetuoです。

環境
PHP                       4.3.10
Mail                      1.1.4    stable
Mail_Mime                 1.2.1    stable

> 間違ったいたほうの呼び出し形式だと改行コードが\r\nになってしまうため、
> ヘッダーの途中で切れたいたようです。

この添付ファイル付きメール送信の一連の流れですが、改行コードもさることな
がら、もう1つ問題点があったのかと思っています。


<?PHP
    require_once('Mail.php');
    require_once('Mail/mime.php');

    
    $mime = new Mail_mime();       //あえて設定してない
    $mime->setFrom('from @ sample.com');
    $mime->setSubject('subject');
    $mime->setTXTBody("text body");
    $mime->addAttachment('./image.jpg', 'image/jpeg', '0.jpg');

    var_dump($mime->headers());
    $body = $mime->get();
    $heads = $mime->headers();
    var_dump($heads);

    $mail = Mail::factory('mail');
    $mail->send(
        'to @ sample.com', 
        $heads,
        $body
    );
?>

上記のコードで正常に添付ファイル付きのメールが送れる事は試しているのです
が(FromとToはもちろん変えてます)、下記の部分がとても気になります。

    var_dump($mime->headers());    // 1
    $body = $mime->get();
    $heads = $mime->headers();
    var_dump($heads);              // 2

1度目の「$mime->headers()」では内容として「Content-Type」が出力されませ
ん。2度目の「$mime->headers()」では「Content-Type」が出力されます。

2度目のものは「$mime->get()」を呼び出した後なので、どうもそうなっている
ようなのですが、ここを意識せずに

    $mail->send(
        'to @ sample.com', 
        $mime->headers(),
        $mime->get()
    );

このようなメールの送り方をすると、$mime->get()が$mime->headers()の後に呼
ばれる為、結果、ヘッダーに「Content-Type」が出力されず、添付ファイルが壊
れた(?)状態でメールが作成されます。

自分はここでかなり引っかかりました。

これは仕様なのか、バグなのか、詳しい事情が分かる方が居られましたら、解説
願います。



PHP-users メーリングリストの案内