[PHP-users 32119] PEAR::Mail_MIMEのaddAttachmentメソッドで日本語ファイル名が途切れる

Atsushi Tanase tanase @ newnen.net
2007年 5月 11日 (金) 04:44:55 JST


はじめてご質問させていただきます、
棚瀬篤史と申します。


PEAR::Mail_MIMEのaddAttachmentメソッドにおきまして、
日本語添付ファイルのファイル名が途切れてしまうものが
出てきて困っております。
同様の現象を体験し、克服された方がおられないかと思い、
投稿させていただきました。

以下、詳細です。
環境) Linux(FedoraCore3),Apache/2.0.53,PHP(Ver4.3.11)
(すべてUTF-8で内部コーディングしています)

現象)
「年」という文字を含ませ、
mb_convert_encoding()関数を用いてUTF-8からISO-2022-jpに
ファイル名変換した日本語ファイル名がその文字以前が途切れた
ファイル名にて送信されてしまった。
(例)
テスト資料(2007年).txt
というファイル名であれば、
).txt
といったように途切れた添付ファイル名でメール送信されて
しまいます。

(当方ではこの「年」という文字でのみこの現象を確認しましたが、
他にもあるかと思われます。)

ソース(抜粋))
======
require_once('Mail.php');
require_once('Mail/mime.php');

$crlf = "\n";
$subject = "メール題名";  
$text    = "本文";
$subject = mb_convert_encoding( $subject, "ISO-2022-JP", "UTF-8" );
$subject = mb_encode_mimeheader( $subject, "ISO-2022-JP" );
$text = mb_convert_encoding( $text, "ISO-2022-JP", "UTF-8" );
$hdrs = array( 'From'    => 'info @ yyy.jp', 
               'Sender'    => 'info @ yyy.jp', 
               'Subject' => $subject );
$mime = & new Mail_mime($crlf);
$mime->setTXTBody($text);

$file1 = './tempdoc/file1.txt';
$file1_str = "テスト資料(2007年).txt"; // 「年」を含ませたファイル名
$mime->addAttachment($file1, 'application/octet-stream', 
     mb_convert_encoding($file1_str, 'ISO-2022-JP', 'UTF-8' ));  
     // ↑↑問題部分↑↑

$build_param = array("text_charset" => "ISO-2022-JP",
                     "head_charset" => "ISO-2022-JP");

$body = $mime->get( $build_param );
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send('info @ yyy.jp', $hdrs, $body);

...
======

文字エンコード変換にまつわる種々の問題を分かる範囲で
調べてみたのですが本現象を当方には解明できませんでした。

エンコード変換という基本的な部分の質問で大変恐縮ですが、
皆様のお知恵を拝借できれば幸いです。

以上、よろしくお願いいたします。


棚瀬篤史
tanase @ newnen.net


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