[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 メーリングリストの案内