Офис НП AMWAY в Ярославле

→ На карте Купить AMWAY: офис в ЯрославлеКонсультации, презентации, мастер–классы, знакомство с продукцией, заказ и выдача купленного товара:
●Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
●Телефон: +7 (920) 112-00-91
●Email: matyxho@mail.ru
●Сайт: https://www.amway.ru/user/lebedem
●Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » Отправка писем через функцию mail() без "кракозябров"
Сниппет
Весьма часто встречается проблема при отправке писем через стандартную функцию PHP mail(), а именно: получателю приходит письмо в совершенно нечитабельном виде. Опишу один из способов решения проблемы.
Отправка писем через функцию mail() без "кракозябров"
Возникла тут одна проблема при отправке письма с сайта через стандартную функцию mail();, проблема, как всегда, была связана с "кракозябрами" в приходящем с сайта сообщении. Чуть погуглив и почесав репу, решение было найдено, не одно- а куча целая, вплоть до готовых скриптов, которые оставалось только подключить. Но их я рассматривать не буду, покажу самое простое решение для отправки html- содержимого в письме.
Итак, что нам нужно для отправки письма через стандартную функцию php mail():
Итак, для начала- пример с одним получателем. Кодировку ставим UTF-8, так как это самый оптимальный вариант. Помни: кодировка страницы, с которой отправляется сообщение, должна совпадать с кодировкой письма. Тему сообщения кодируем в base64, указывая на это в заголовке: так письма корректно будут приходить на горячо любимый всеми почтовый сервис Mail.ru.
Вот так вот, оказывается, все просто.
Ну а теперь отправим письма нескольким адресатам, взятым, например, из базы данных. После каждого адреса просто ставим запятую, но не забываем, что если адресов много, это может сильно грузить сервер. Теперь наш код будет выглядеть примерно так:
Вот, в общем, и все. Знаю, что это уже тысячу раз обсуждали, знаю, что функции mysql_query, mysql_fetch_array и mysql_num_rows устарели с версии php 5.3, но все, что здесь изложено — лишь для примера (хотя код рабочий), а вы уж сами решайте, куда это пихнуть и как изменить.
Итак, что нам нужно для отправки письма через стандартную функцию php mail():
- Получатель (получатели)
- Тема письма
- Само тело сообщения
- Заголовки
Итак, для начала- пример с одним получателем. Кодировку ставим UTF-8, так как это самый оптимальный вариант. Помни: кодировка страницы, с которой отправляется сообщение, должна совпадать с кодировкой письма. Тему сообщения кодируем в base64, указывая на это в заголовке: так письма корректно будут приходить на горячо любимый всеми почтовый сервис Mail.ru.
Код: PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $email = 'admin@meweb.ru' ; $subject = 'Вам письмо с сайта ' . $_SERVER [ 'SERVER_NAME' ]; $msg = '<html><head><meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > </head><body>'; $msg . = '<!-- здесь вы вставляете любое html содержимое, главное, чтобы кодировка, заявленная в заголовке, совпадала с кодировкой письма -->' ; $msg . = '</body></html>' ; // далее идут заголовки $headers = array (); // указываем, что это html документ в кодировке utf-8 $headers [] = 'MIME-Version: 1.0' ; $headers [] = 'Content-Type: text/html; charset="UTF-8"' ; // указываем, что тема закодирована $headers [] = 'Content-Transfer-Encoding: 7bit' ; $headers [] = 'From: yourmail@domain.net' ; $headers [] = 'X-Mailer: PHP v' .phpversion(); // ну и теперь- сама функция отправки // заголовки разбиваем через implode(), добавляя переносы mail( $email , '=?UTF-8?B?' . base64_encode ( $subject ). '?=' , $msg , implode ( "\r\n" , $headers )); |
Вот так вот, оказывается, все просто.
Ну а теперь отправим письма нескольким адресатам, взятым, например, из базы данных. После каждого адреса просто ставим запятую, но не забываем, что если адресов много, это может сильно грузить сервер. Теперь наш код будет выглядеть примерно так:
Код: PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $manyemail = mysql_query ( "SELECT `user_email` FROM `users`" ) or die ( mysql_error ()); if ( mysql_num_rows ( $manyemail ) ! = 0){ $email = array (); while ( $row = mysql_fetch_array ( $manyemail )) { $email [] = $row [ 'user_email' ]; } $subject = 'Рассылка с сайта ' . $_SERVER [ 'SERVER_NAME' ]; $msg = '<html><head><meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > </head><body>'; $msg . = '<!-- здесь вы вставляете любое html содержимое, главное, чтобы кодировка, заявленная в заголовке, совпадала с кодировкой письма -->' ; $msg . = '</body></html>' ; // далее идут заголовки $headers = array (); // указываем, что это html документ в кодировке utf-8 $headers [] = 'MIME-Version: 1.0' ; $headers [] = 'Content-Type: text/html; charset="UTF-8"' ; // указываем, что тема закодирована $headers [] = 'Content-Transfer-Encoding: 7bit' ; $headers [] = 'From: yourmail@domain.net' ; $headers [] = 'X-Mailer: PHP v' .phpversion(); // ну и далее- отправка письма, через implode добавляем в массив адресов запятую mail( implode ( ", " , $email ), '=?UTF-8?B?' . base64_encode ( $subject ). '?=' , $msg , implode ( "\r\n" , $headers )); } |
Вот, в общем, и все. Знаю, что это уже тысячу раз обсуждали, знаю, что функции mysql_query, mysql_fetch_array и mysql_num_rows устарели с версии php 5.3, но все, что здесь изложено — лишь для примера (хотя код рабочий), а вы уж сами решайте, куда это пихнуть и как изменить.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения |