Qdmailを使用してメール送信プログラムを作成中
添付ファイルのところで躓いてしまいました。
Qdmailは添付ファイル名に日本語を使用することができるんですが
半角と全角が混じっている次のようなファイル名の場合
受信したメールに添付されているファイル名が元のものと異なってしまいます。
正しく送信されない例)
元のファイル名 => あああaaa.txt
受信したファイル名 => aaa.txt元のファイル名 => あああaaaあああaaa.txt
受信したファイル名 => aaaあああaaa.txt
ちなみに次のようなファイル名の場合は問題なく送信されました。
正しく送信される例)
ファイル名 => aaaあああaaaあああaaa.txt
要は、全角文字列の後に半角文字列が来るようなファイル名の場合が該当します。
調べたところ、この不具合は実は、Qdmailの不具合と言うよりは正確にはPHP5の不具合のようです。
詳しくは下記URLを参照してください。
Andante – PHP、Linux環境でbasenameやpathinfoでの全角(日本語等)ファイル名の正しく取得が出来ない
さて、今回の場合ですがQdmailのソースを一部修正しなければなりません。
qdmail.phpの2899行目あたりを修正します。
修正前
2894 2895 2896 2897 2898 2899 2900 |
if (isset($par['NAME'])){ $attach_name = $par['NAME']; } else if (isset($par[1])) { $attach_name = $par[1]; }else{ $attach_name = basename( $path_filename ); } |
修正後
2894 2895 2896 2897 2898 2899 2900 |
if (isset($par['NAME'])) { $attach_name = $par['NAME']; } elseif (isset($par[1])) { $attach_name = $par[1]; } else { $attach_name = end(explode('/', $path_filename)); } |
これで、正しいファイル名で添付ファイルが送信されるようになりました。