Дуже багато часу витратив, намагаючись заставити PHP-функцію mail() відправити повідомлення в UTF-8. Заголовки робив правильні, але повідомлення приходило закарлючками.
А причина виявилася в налаштуваннях PHP, параметр mbstring.func_overload
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://www.php.net/manual/en/mbstring.configuration.php#ini.mbstring.func-overload
Було:
mbstring.func_overload = 1
Встановив:
mbstring.func_overload = 2
і запрацювало.
Проте виникли проблеми з іншим сайтом (віртуальним хостом)!
З таким налаштуванням Smarty не хоче компілювати шаблони (перевірено на Smarty v. 3.1.18, PHP v. 5.4.27).
Добре, що PHP-FPM дозволяє створити кілька робочих пулів з різними конфігураціями.
UPD. Дурниці це!
Люди, залишайте
mbstring.func_overload = 0
і використовуйте для відсилання пошти якісно написані бібліотеки, наприклад, SwiftMailer або PHPMailer.