Red Spirit

Блог Алексея Таянчина

RSS 2.0

100%-ная отправка почты на PHP

У меня как только дело касалось отправки почты на PHP всегда неожиданно возникали проблемы. Как правило проблемы с кодировками. Если все нормально отображается в одном почтовом клиенте, то в другом все наперекосяк. В общем, решил с этим делом раз и навсегда разобраться и написать для себя простецкую функцию, которая бы без проблем и стопудовски корректно отправляла любые письма.

Ну конечно, конечно, есть миллион подобных классов, которые все это уже делают, если хотите, используйте их, а у меня своя задачка сделать свой простой и надежный шаблон отправки писем в кодировке UTF-8. Тут имеется ввиду, что текстовые данные, которые получает функция тоже должны быть в UTF-8 (без BOM).

Я написал обертку для стандартной mail:

Все просто, ничего такого тут нет, единственно только кириллический текст в заголовках надо предварительно закодировать в base64 как это сделано с переменной $subj. Так что если понадобится дописать в поля отправителя и получателя русский имена вы знаете, что нужно сделать.

  • http://twitter.com/swarlton Roman

    > должны быть в UTF-8 (без BOM)
    У UTF-8 BOM и не может быть. Только у UTF-16/UTF-32.
    И почему не iconv?

  • http://redspirit.ru Red Spirit

    у UTF-8 может быть, добавляется сигнатура три байта EF BB BF из-за которых мне однажды пришлось помучатся. Если текст письма будет браться из файла.
    Просто советую придерживаться всегда и во всем UTF-8 и не будет надобности в лишних iconv-ах. В том числе и в mysql, после подключения выполнив запрос “SET character set utf8″

  • http://twitter.com/swarlton Roman

    Так то не BOM, а иногда используемая сигнатура файла в UTF-8.
    Я лишь к тому, что неверно называть это BOM’ом, ибо к UTF-8, в принципе, неприменимо понятие bytes order. Следует исправить в посте и не вводить людей в заблуждение :).

  • http://redspirit.ru Red Spirit

    “Некая Редко Используемая Сигнатура Указывающая На Формат UTF-8″, не, не катит. БОМ пусть и не имеет смысла, зато сразу понятно что имеется ввиду и нет в этом никакого преступления, люди не пострадают.

  • http://twitter.com/swarlton Roman

    Все же BOM – Byte Order Mark – метка порядка байт. В UTF-8 порядка байт вовсе и нет, там суррогатные последовательности, так что использование термина BOM в корне неверно.
    Впрочем, дело твое, я лишь указал на ошибку :)