Офис НП 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
$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
$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, но все, что здесь изложено — лишь для примера (хотя код рабочий), а вы уж сами решайте, куда это пихнуть и как изменить.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения | |
Вопрос по переделке bb-кода PHP, MySQL |
22125 | 5 | Pisatel 26. мая 2017 |
|
Вопросы по Ajax форме обратной связи CMS PHP Fusion |
67405 | 48 | Ditrin 19. февраля 2017 |
|
BBCode YouTube Video Colorbox mod CMS PHP Fusion |
15249 | 2 | Pisatel 10. декабря 2016 |
|
Как лучше создать собственную страницу? CMS PHP Fusion |
17737 | 17 | Pisatel 11. мая 2016 |
|
Небольшие вопросы по скриптам магазина и катало... PHP, MySQL |
142679 | 80 | Pisatel 11. января 2016 |
|
BBCode Code mod CMS PHP Fusion |
14249 | 0 | Pisatel 31. августа 2015 |
|
Ajax Like Dislike Article Panel CMS PHP Fusion |
22294 | 16 | Pisatel 07. июля 2015 |
|
Хлебные крошки / BreadCrumbs SEO Panel CMS PHP Fusion |
25982 | 17 | Pisatel 04. июля 2015 |
|
Abbr Description BBCode CMS PHP Fusion |
7600 | 0 | Pisatel 15. июня 2015 |
|
Плагин Email рассылки Mail To All by Pisatel CMS PHP Fusion |
36603 | 32 | Pisatel 26. апреля 2015 |
|
Подозрительный трафик и прочие страшилки Всякая хрень |
11705 | 2 | Ditrin 23. апреля 2015 |
|
Мод Newsletter - рассылка писем пользователям с... CMS PHP Fusion |
30921 | 13 | Pisatel 10. апреля 2015 |
|
Мод отправки писем PHPMailer для PHP-Fusion CMS PHP Fusion |
126260 | 113 | Ditrin 06. апреля 2015 |
|
Появление неизвестного файла subscriptions.php CMS PHP Fusion |
8801 | 2 | Pisatel 06. апреля 2015 |
|
Autoban on IP CMS PHP Fusion |
23075 | 13 | Pisatel 03. апреля 2015 |