アクセント付きの文字を保持するメールの送信に問題があります。いくつかのページと以前に寄せられた質問への回答を読むことで、(部分的に)機能する解決策を見つけることができました。
次のコードは問題なく動作します (つまり、使用している電子メール クライアントにアクセント付きの文字が表示されます)。PEAR php ライブラリを使用します。ただし、後で説明するように、このコードは英語にのみ有効です。
...
$headers['From'] = "info@website.it";
$headers['Subject'] = 'Request';
$headers['Reply-To'] = $sanitized_email;
$headers["Content-Type"] = 'text/html; charset=UTF-8';
$headers["Content-Transfer-Encoding"]= "8bit";
$host= _CMS_MAIL_SERVER;
$username = "info@website.it";
$password = "pass";
$crlf = "\n";
$mime = new Mail_mime(array('eol' => $crlf));
$html_body = ...;
// read $html_body from file
// substitute some %tags% in $html_body
$mime->setHTMLBody($html_body);
$mimeparams['text_encoding']="8bit";
$mimeparams['text_charset']="UTF-8";
$mimeparams['html_charset']="UTF-8";
$mimeparams['head_charset']="UTF-8";
$mimebody = $mime->get($mimeparams);
$hdrs = $mime->headers($headers);
$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password));
$mail_res = $smtp->send($recipients, $hdrs, $mimebody);
...
$html_body には、date または strftime(..) によって返される時刻と日付の値に置き換える必要があるタグがいくつかあります。デフォルトのロケールは英語なので、イタリア語の日付と時刻を使用するには、strftime(...) を呼び出す前にロケールを設定する必要があります。
この行を追加すると:
setlocale(LC_TIME, "it_IT");
アクセント記号付きの文字は、メール クライアントで正しく表示されません。詳細: strftime によって返されるアクセント付き文字は正しく表示されますが (例: lunedì)、フォーム フィールドを介して送信されたアクセント付き文字は正しく表示されません。
そのエラーを修正する方法を理解するためにいくつかの調査を行いましたが、解決策は見つかりませんでした。さらに、LC_TIME の setlocale とアクセント付き文字との関係がどのようなものか、私には明確ではありません。
私を助けてくれる人はいますか?