Офис НП 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() без "кракозябров"
Опубликовал  Pisatel Добавлено  10-12-2013 12:27 10 Декабрь 2013 12:27:36 6123  Прочтений 6123 Прочтений  4 Комментариев 4 Комментариев
 printer
Возникла тут одна проблема при отправке письма с сайта через стандартную функцию mail();, проблема, как всегда, была связана с "кракозябрами" в приходящем с сайта сообщении. Чуть погуглив и почесав репу, решение было найдено, не одно- а куча целая, вплоть до готовых скриптов, которые оставалось только подключить. Но их я рассматривать не буду, покажу самое простое решение для отправки html- содержимого в письме.

Итак, что нам нужно для отправки письма через стандартную функцию 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, но все, что здесь изложено — лишь для примера (хотя код рабочий), а вы уж сами решайте, куда это пихнуть и как изменить.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Комментарии
#1 | djchek 11 декабря 2013 15:04:47
No Avatar
Гость
вот это то что нужно! спасибо!!! измучился с этой отправкой я в php плохо шарю
#2 | KaylaBew 21 марта 2019 10:46:43
No Avatar
Гость
Hello, did you receive my offer?
from2325214cv
#3 | &#1045;&#1074;&#1075;&#1077;&# 07 октября 2019 14:44:03
No Avatar
Гость
&#1055;&#1077;&#1088;&#1077;&#1079;&#1074;&#1086;&#1085;&#1080;&#1090;&#1077; &#1084;&#1085;&#1077; &#1087;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1087;&#1086; &#1085;&#1086;&#1084;&#1077;&#1088;&#1091;. 8 (999) 247-39-24 &#1045;&#1074;&#1075;&#1077;&#1085;&#1080;&#1081;.
#4 | Janfeemivy 24 марта 2020 12:56:56
No Avatar
Гость
Mebendazole Over The Counter Canada Cialis Levitra 10 Mg Generico <a href=https://apcialisle.com/#>Cialis</a> Erfahrungsbericht Viagra 100
Добавить комментарий
Имя:

Проверочный код:
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
14911 33 promask
27. апреля 2019
folder Вопрос по переделке bb-кода
PHP, MySQL
3831 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
16202 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
8371 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
8348 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
57310 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
4532 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
8858 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
10494 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
3501 0 Pisatel
15. июня 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
6959 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
8728 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
45861 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
4127 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
14808 13 Pisatel
03. апреля 2015