Функция mail
Чем хорош язык php,так это тем, что в нем реализована масса функций, которые позволяют одним движением решить целую кучу проблем. Но с другой стороны, это расхолаживает и зачастую ставит в тупик неопытных программистов, оказывая им медвежью услугу.
Функция mail() яркое тому подтверждение.
Казалось бы - чего проще, написал скрипт:
И жди весточку. Ведь ясно сказано - функция mail() принимает аргументами
1. Адрес получателя
2. Тему письма
3. Текс сообщения
4. (Необязательный параметр) Заголовки.
А не все так просто. Запустите этот скрипт на локалхосте и посмотрите, что находится в папке по адресу
Z:\tmp\!sendmail
Это так называемая почтовая заглушка, которая помогает в отладке подобного рода скриптов. Она перехватывает письма, отправленные Денвером и складывает туда.
Почему так? Да очень просто. Во первых, как уже было сказано, в тему письма нельзя допускать кирилицу. А как же быть? Ведь письмо хочется подписать по русски, а не абы как...
Можно воспользоваться транслитом. Но это еще смешнее. По этому будем делать грамотно - закодируем кирилицу согласно предписаниям. А они гласят:
Кодировать тему нужно по следующему алгоритму.
Что это такое. Сначала спецсимволы =? которые дают понять, что сейчас будет служебная информация.
Потом собственно сама кодировка utf-8.
Потом опять разделитель ? и способ кодирования b. Способа два - "Q-encoding" (обозначается буквой Q) и "Base64" (соответственно b).
Мы выбрали второй, по этому сам текст темы будем кодировать с помощью функции base64_encode()
Ну и далее опять комбинация символов, обознячающая конец темы: ?=
Исправим наш скрипт так:
и посмотрим, что получится. Ага? Тема теперь видна нормально? То то.
А как же быть с самим сообщением? Тут тоже нет особых сложностей. Нужно просто напросто указать требуемую информацию в заголовках. Ведь по большому счету все сервера ведут себя примерно одинаково: есть инструкция - выполняют. Нет - творят что хотят. По этому лучше не искушать судьбу и прописать заголовки как положено. А положено так:
Тут мы указали тип письма (text/plain, то есть простой текст) и кодировку (utf-8). Запустите скрипт и полюбуйтесь - все теперь прекрасно видно.
Но радоваться рано. У нас в письме нет отправителя. А это верный признак того, что письмо будет расценено как спам и спам-фильтр порядочного почтового агента его заблокирует. Не будем писать анонимок, подпишемся:
Если мы теперь откроем письмо в редакторе, то увидим такую картину:
Есть еще один нюанс. Очень часто хостер принудительно меняет адрес отправителя на свой. Что бы этого не произошло, нужно добавить четвертый параметр в функцию mail(). Им является обратный адрес, который предваряется символами -f (Без пробела, прямо так: -femail@yandex.ru)
Однако нужно знать, что не все хостеры это любят и всячески пытаются препятствовать. Иногда этот параметр становится причиной пустого почтового ящика.
Источник
Чем хорош язык php,так это тем, что в нем реализована масса функций, которые позволяют одним движением решить целую кучу проблем. Но с другой стороны, это расхолаживает и зачастую ставит в тупик неопытных программистов, оказывая им медвежью услугу.
Функция mail() яркое тому подтверждение.
Казалось бы - чего проще, написал скрипт:
Код PHP | ||
|
1. Адрес получателя
2. Тему письма
3. Текс сообщения
4. (Необязательный параметр) Заголовки.
А не все так просто. Запустите этот скрипт на локалхосте и посмотрите, что находится в папке по адресу
Z:\tmp\!sendmail
Это так называемая почтовая заглушка, которая помогает в отладке подобного рода скриптов. Она перехватывает письма, отправленные Денвером и складывает туда.
Почему так? Да очень просто. Во первых, как уже было сказано, в тему письма нельзя допускать кирилицу. А как же быть? Ведь письмо хочется подписать по русски, а не абы как...
Можно воспользоваться транслитом. Но это еще смешнее. По этому будем делать грамотно - закодируем кирилицу согласно предписаниям. А они гласят:
Кодировать тему нужно по следующему алгоритму.
Код PHP | ||
|
Потом собственно сама кодировка utf-8.
Потом опять разделитель ? и способ кодирования b. Способа два - "Q-encoding" (обозначается буквой Q) и "Base64" (соответственно b).
Мы выбрали второй, по этому сам текст темы будем кодировать с помощью функции base64_encode()
Ну и далее опять комбинация символов, обознячающая конец темы: ?=
Исправим наш скрипт так:
Код PHP | ||
|
А как же быть с самим сообщением? Тут тоже нет особых сложностей. Нужно просто напросто указать требуемую информацию в заголовках. Ведь по большому счету все сервера ведут себя примерно одинаково: есть инструкция - выполняют. Нет - творят что хотят. По этому лучше не искушать судьбу и прописать заголовки как положено. А положено так:
Код PHP | ||
|
Но радоваться рано. У нас в письме нет отправителя. А это верный признак того, что письмо будет расценено как спам и спам-фильтр порядочного почтового агента его заблокирует. Не будем писать анонимок, подпишемся:
Код PHP | ||
|
\"utf-8\"\r\n"; $headers .= "From: <". $from .">\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n"; $message = 'Вот такое вот письмо'; mail($to, $subject, $message, $headers);
Есть еще один нюанс. Очень часто хостер принудительно меняет адрес отправителя на свой. Что бы этого не произошло, нужно добавить четвертый параметр в функцию mail(). Им является обратный адрес, который предваряется символами -f (Без пробела, прямо так: -femail@yandex.ru)
Код PHP | ||
|
Источник