日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 5 » 電子メールの長いファイル名の添付ファイルで、ファイル名が文字化けする

電子メールの長いファイル名の添付ファイルで、ファイル名が文字化けする

ページ: 1

投稿者 投稿
会員
登録者: 2 2010
返信数: 7
PHPというかPEARのMail_mimeについて質問です。

Mail_mimeクラスを使って、電子メールの添付ファイルを実装しました。
添付ファイルのファイル名が長い場合に不具合が起こって困っております。
どなたか解決策を知っている方がいらっしゃれば、教えていただけたらと思います。


現象
長い日本語名のファイルを添付して送信すると、添付ファイルの名称が文字化けした形になる。
5-10文字程度なら、文字化けしません。
また、送信したファイルの内容に関しては、拡張子などファイル名を正しく設定しなおせば、正常に開くことができます。

考察
受信したファイルのMIME情報を見てみました。

●文字化けするパターン
Content-Type: application/octet-stream;
name*0*=US-ASCII''%3D%3FISO-2022-JP%3FB%3FGyRCOXE6XSU3JXMlXSU4JSYlYDlxOl0;
name*1*=lNyVzJV0lOCUmJWA5cTpdGyhC%3F%3D%0D%0A%20%3D%3FISO-2022-JP%3FB%3FL;
name*2*=nBkZg%3D%3D%3F%3D

〇文字化けしないパターン
Content-Type: application/pdf;
name="=?ISO-2022-JP?B?GyRCOXE6XSU3JXMlXSU4JSYlYBsoQjIwMTEgGyRCIVZHWSQsJHMkThsoQg==?=
=?ISO-2022-JP?B?GyRCPTgzWEUqPCNORSROOkdBMEB+GyhCIBskQiFdR1kkLCRzJE5LUBsoQg==?=
=?ISO-2022-JP?B?GyRCTEckckxcO1gkNyRGIV0hVxsoQi5wZGY=?="

文字化けしないパターンはメールソフトで長い名前のファイルを添付して送った場合です。

どうも、MIMEの一行の長さを越えた場合にヘッダ情報を複数行にする処理が走っているようですが、一般のメールソフトではそれがなさそうです。
もしかすると、文字コードの変換の仕方が悪くてこのようになっているのかもしれませんが、短いファイル名だとうまくいきます。
ちなみに、UTF-8からISO-2022-JPへ変換するようにしています。

Mail_mime::addAttachmentの引数で、このあたりを制御することが出来ないようです。
何かお気づきの点がありましたら、ご指摘いただけたらと思います。

宜しくお願いします。
« 最終編集者 yocco 日時 2011 年 10 月 20 日(木) 20:10. »
会員
登録者: 2 2010
返信数: 7
自己レスです。

どうも、ライブラリのRFC2231に準拠が逆にあだになっているようです。
PEARのmimiPart.phpに自分でパッチを当てて解決しました。
以前の形式でヘッダを作成するようにしました。

ページ: 1

日本PHPユーザ会 掲示板 » PHP 5 » 電子メールの長いファイル名の添付ファイルで、ファイル名が文字化けする

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています