Отправка email при помощи PHP

    Сегодня мы поговорим о том, как отправлять email письма с помощью встроенных php функций. Казалось бы — что тут проще? Берёшь функцию mail(), задаёшь ей 3-5 параметров и всё. А вот и нет — тут не всё так просто и при детальном рассмотрении возникает просто огромнейшее количество подводных камней:

    • Кириллица в теме, в тексте письма, в имени отправителя
    • Отправка писем в другой кодировке
    • Использование вложений
    • HTML вёрстка, вставка изображений в тело письма

    Не стоит унывать, если у вас что-то из этого не работает. Для начала, давайте, разберёмся с первыми двумя проблемами. Если написать, например, mail('test@example.com','Привет!','Привет! Как дела?'), то адресат, скорее всего, получит кракозябры.

    Для того, чтобы почтовый клиент знал, в какой кодировке пришло письмо, надо указать его в заголовках:

    Content-type: <тип письма>; charset=<кодировка>
    тип письма: text/plain или text/html
    с кодировкой, я думаю, понятно.

    Но! Даже если вы указали кодировку письма в заголовках, то этот приём не работает для темы письма, имени отправителя или получателя, названий вложенных файлов.

    Для указания кодировки темы письма и прочих вышеперечисленных полей необходимо использовать следующую конструкцию:

    =?<кодировка>?B?<текст в base64>?=

    Поскольку кодировка php (обычно это utf-8) и кодировка писем (обычно это windows-1251) часто отличаются, то ещё и желательно их перекодировать. Вот функция, которая проводит все необходимые манипуляции:

    1. function mime_header_encode($str, $data_charset, $send_charset){
    2.   if($data_charset != $send_charset)
    3.     $str=iconv($data_charset,$send_charset.'//IGNORE',$str);
    4.   return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
    5.   }

    Я всегда был за расширяемость кода, поэтому отправку писем оформил в отдельный класс:

    1. class TEmail{
    2.   public $from_email;
    3.   public $from_name;
    4.   public $to_email;
    5.   public $to_name;
    6.   public $subject;
    7.   public $data_charset='UTF-8';
    8.   public $send_charset='windows-1251';
    9.   public $body='';
    10.   public $type='text/plain';
    11.   function send(){
    12.     $dc=$this->data_charset;
    13.     $sc=$this->send_charset;
    14.     //Кодируем поля адресата, темы и отправителя
    15.     $enc_to=mime_header_encode($this->to_name,$dc,$sc).' <'.$this->to_email.'>';
    16.     $enc_subject=mime_header_encode($this->subject,$dc,$sc);
    17.     $enc_from=mime_header_encode($this->from_name,$dc,$sc).' <'.$this->from_email.'>';
    18.     //Кодируем тело письма
    19.     $enc_body=$dc==$sc?$this->body:iconv($dc,$sc.'//IGNORE',$this->body);
    20.     //Оформляем заголовки письма
    21.     $headers='';
    22.     $headers.="Mime-Version: 1.0\r\n";
    23.     $headers.="Content-type: ".$this->type."; charset=".$sc."\r\n";
    24.     $headers.="From: ".$enc_from."\r\n";
    25.     //Отправляем
    26.     return mail($enc_to,$enc_subject,$enc_body,$headers);
    27.     }
    28.   }

    Вот так мы будем отправлять письма:

    1. //Текстовое письмо
    2.   echo('Plain text email - sending...<br>');
    3.   $email=new TEmail;
    4.   $email->from_email='noreply@konservs.com';
    5.   $email->from_name='Автор ІЇҐЭЄ іїґэє';
    6.   $email->to_email='******@gmail.com';
    7.   $email->to_name='Для Васі';
    8.   $email->subject='Тема ІЇҐЭЄ іїґэє';
    9.   $email->body='Текстовий тестовий лист. Тест: ІЇҐЭЄ іїґэє';
    10.   if($email->send())
    11.     echo('Plain text email - OK.<br>'); else
    12.     echo('Plain text email - Error!<br>');
    13.   //HTML письмо
    14.   echo('HTML email - sending...<br>');
    15.   $email=new TEmail;
    16.   $email->from_email='noreply@konservs.com';
    17.   $email->from_name='Автор ІЇҐЭЄ іїґэє';
    18.   $email->to_email='******@gmail.com';
    19.   $email->to_name='Для Васі';
    20.   $email->subject='Тема ІЇҐЭЄ іїґэє';
    21.   $email->type='text/html';
    22.   $email->body='Тестовий лист в HTML.
    23.     <h1>Header 1 (Заголовок 1)</h1>
    24.     <h2>Header 2 (Заголовок 2)</h2>
    25.     <h3>Header 3 (Заголовок 3)</h3>
    26.     <h4>Header 4 (Заголовок 4)</h4>
    27.     <h5>Header 5 (Заголовок 5)</h5>
    28.     Тест: ІЇҐЭЄ іїґэє';
    29.   if($email->send())
    30.     echo('HTML email - OK.<br>'); else
    31.     echo('HTML email - Error!<br>');

    Знаете, почему я кирилические письма отправляю в Windows-1251? Да потому что mail.ru не корректно принимает письма в utf-8, а в KOI-8 нет украинских букв(«і»,«ї»,«ґ»,«є»).

    Проверяем отправку. Мне на почту пришло таких вот два письма:

    Пришло письмо в текстовом формате Пришло письмо в HTML формате

    В следующей части я расскажу вам о том, как правильно использовать вложения и что нужно делать для того, чтобы организовать правильную вёрстку письма.

    Комментарии

    22.11.2012 09:51:36
    Avatar of ВасяВася
    Спасибо за статью. Всё работает.
    24.07.2013 12:02:43
    Avatar of ДмитрийДмитрий
    Напишите пожалуйста про то как правильно отправлять почту чтобы она в гмэйле не в спам падала)
    25.07.2013 02:22:02
    Avatar of КонсервКонсерв
    Спам-фильтр Gmail (да и не только gmail) зависит от многих параметров.

    В первую очередь - это контент. Если тема письма - "Увеличь *** за 3 дня!", то оно почти наверняка попадёт в спам. Текст тоже имеет значение. Исходя из моего опыта, массовые рассылки ни к чему хорошему не приводят. Лучше чтобы письма отправлялись не все сразу, а через определённый промежуток времени (например, 1 письмо в минуту) да и контент хоть немного отличался.

    Далее - статистика рассылок с почтового сервера. Если с вашего сервера (имеет значение IP-адрес и доменное имя) регулярно отправляется спам, то он попадает в "чёрный список". На многих хостингах используется один или несколько почтовых серверов для всех сайтов, так что спам может отправлять ваш "сосед", а санкции понесут все. Обычно хостинги банят за спам. Можно сменить хостинг. Если вам надо 100% решение - закажите VDS или VPS и поднимите свой почтовый сервер.

    Ещё один фактор (довольно важный) - действия пользователей. Если хотя бы несколько адресатов с похожими письмами (например, в случае рассылки) нажали кнопку "это спам", то остальные письма рассылки (с похожим текстом) тоже попадают в спам. Желательно чтобы письма рассылки были более-менее уникальными (например, если вам надо отправить список новых статей на сайте за неделю, то можно отправлять не весь список, а ссылки только на те статьи, которые по тематике подходят данному пользователю).

    Если адресат - вы, то можно не париться и создать специальный фильтр или добавить адресата в контакты, чтобы письма от адресата (или группы адресатов) не попадали в спам.

    Если коротко, то рецепт один: если хотите, чтобы письма не попадали в папку "Спам", не пишите спам! :-)
    26.08.2013 05:53:25
    Avatar of mindnomindmindnomind
    Спасибо, добрый человек!
    16.12.2014 02:15:32
    Avatar of ЕвгенийЕвгений
    Спасибо огромное. Письма отправлял на два ящика, заказчику и себе. В ящик pop3 приходило в нормальном виде, в ящик для заказов, он подключен по imap, валились кракозябры. Все заработало как надо.
    19.08.2015 05:38:07
    Avatar of КонсервКонсерв
    @Евгений
    Пожалуйста :-)
    16.03.2018 09:43:47
    Avatar of JulieTapJulieTap
    День добрый.
    Спасибо за ресурс.
    14.11.2019 02:05:38
    Avatar of MausedotMausedot
    Всем привет
    Посмотрите интересную публикацию с сайта,не реклама

    P.S.<a href=http://offeramazon.ru/2019/10/18/smart-casual/>аксессуары</a>
    итальянские бренды

    Увидимся!
    13.05.2021 08:19:08
    Avatar of RichardnedRichardned

    <a href=http://barca.ru/goto.php?url=https://agenciacolors.com.br>criação de site</a>
    13.05.2021 11:44:38
    Avatar of RichardnedRichardned

    <a href=http://psychol-ok.ru.xx3.kz/go.php?url=https://agenciacolors.com.br>agência de site</a>
    14.05.2021 02:12:36
    Avatar of sototron279gaxsototron279gax
    Рынок планшетов иссякает, Apple всех уничтожает, но все же находятся компании готовые показать свою технологичность. В этом году выходит планшет <a href=> Xiaomi Mi Pad 5 дата выхода </a> которого намечена на 4 квартал 2021 года. И если это событие состоится, то можно будет купить топовый планшет за небольшие деньги.
    14.05.2021 03:11:32
    Avatar of RichardnedRichardned

    <a href=https://itboat.com/redirect?url=https://agenciacolors.com.br>criação de site</a>
    14.05.2021 10:36:17
    Avatar of RichardnedRichardned

    <a href=http://monhyip.net/redirect?url=https://agenciacolors.com.br>criação de site</a>
    14.05.2021 02:18:46
    Avatar of RichardnedRichardned

    <a href=https://rutraveller.ru/external?url=https://agenciacolors.com.br>criação de site</a>
    14.05.2021 06:00:22
    Avatar of RichardnedRichardned

    <a href=https://gorod24.online/redirect?url=https://agenciacolors.com.br>seo para empresas</a>
    14.05.2021 09:37:09
    Avatar of RichardnedRichardned
    <a href=http://cskamoskva.ru/partners/link.php?url=https://agenciacolors.com.br>criação de site</a>
    14.05.2021 09:53:51
    Avatar of fynjysxMoinidsfynjysxMoinids
    KtyanadoMoinids
    15.05.2021 01:13:55
    Avatar of RichardnedRichardned
    <a href=http://cskamoskva.ru/partners/link.php?url=https://agenciacolors.com.br>criação de site</a>
    15.05.2021 03:09:37
    Avatar of ethicethic
    <a href=http://msc.com.ru>Таможенный агент Азия-Трейдинг</a> осуществляет свою деятельность при международных поставках <a href=http://msc.com.ru>товаров из стран Азии</a> на основании агентского договора или <a href=http://msc.com.ru>договора поставки</a> с заказчиком, что позволяет компании организовать полный <a href=http://msc.com.ru>комплекс услуг</a> на доставку товаров до склада заказчика и провести <a href=http://msc.com.ru>таможенное оформление</a> в соответствии с таможенным законодательством в кратчайшие сроки.
    15.05.2021 04:52:30
    Avatar of RichardnedRichardned

    <a href=http://psychol-ok.ru.xx3.kz/go.php?url=https://agenciacolors.com.br>seo para empresas</a>
    15.05.2021 05:08:04
    Avatar of RogerSpenoRogerSpeno

    <a href=http://yamayama.co.xx3.kz/go.php?url=https://kupludom24.ru>Куплю дом Красноярск</a>
    15.05.2021 09:39:45
    Avatar of sototron279gaxsototron279gax
    Планшет Xiaomi Mi Pad 5 еще не вышел, а уже известны <a href=> характеристики</a> . Будут версии 8/128 ГБ, 8/256 ГБ, 12/512 и 16/1024 ГБ.
    15.05.2021 09:43:10
    Avatar of RogerSpenoRogerSpeno

    <a href=https://100kursov.com/away/?url=https://kupludom24.ru>Куплю дом Красноярск</a>
    15.05.2021 11:01:14
    Avatar of RichardnedRichardned

    15.05.2021 11:46:53
    Avatar of RogerSpenoRogerSpeno

    <a href=http://xn--d1abkaamepch5h.xn--p1ai/go.php?url=https://kupludom24.ru>Куплю дом Красноярск</a>
    15.05.2021 12:15:40
    Avatar of RichardnedRichardned
    <a href=https://www.nueconceal.com>Stretch mark camouflage</a>
    15.05.2021 01:45:20
    Avatar of ZacharyScorbZacharyScorb

    15.05.2021 01:48:22
    Avatar of RogerSpenoRogerSpeno

    <a href=http://psychol-ok.ru.xx3.kz/go.php?url=https://kupludom24.ru>Куплю дом Красноярск</a>
    15.05.2021 02:21:04
    Avatar of RichardnedRichardned

    15.05.2021 03:23:54
    Avatar of RichardnedRichardned
    <a href=https://www.nueconceal.com>Scar camouflage online training</a>
    15.05.2021 04:25:20
    Avatar of RichardnedRichardned
    <a href=https://www.nueconceal.com>Camouflage treatment</a>
    15.05.2021 05:37:21
    Avatar of ChrisGutChrisGut
    <a href=https://www.pickstar.club>토토</a>
    15.05.2021 08:47:01
    Avatar of ZacharyScorbZacharyScorb

    16.05.2021 04:18:25
    Avatar of Beautiful thingsBeautiful things

    I'm amazed, I must say. Seldom do I come across a blog that's both educative and amusing, and without a doubt, you've hit the nail on the head. The issue is an issue that not enough people are speaking intelligently about. I am very happy I came across this in my search for something concerning this. Beautiful things sewomabest.com/beautiful-things/
    17.05.2021 01:13:41
    Avatar of sototron279gaxsototron279gax
    В сяоми ми пад 5 обещают поставить батарейку аж на 10000 mAh, но вот на долго ли ее будет хватать? Зато максимальная версия Mi Pad 5 <a href=> http://pdafon.com/4853-xiaomi-mi-pad-5.html </a> будет иметь 1 тб памяти, и кому столько надо на планшете - тик токерам? Конечно это юмор. У планшета будет отличная камера, с ней получатся годные видеоролики.
    17.05.2021 04:39:50
    Avatar of LarryloxLarrylox
    Trusted Online Casino Malaysia http://gm231.com/4d-lottery/#Game Mania - Online Casino Malaysia>>>
    17.05.2021 12:31:15
    Avatar of Ремонт фундаментаРемонт фундамента

    <a href=http://www.movable-ink-8447.com/p/cp/8e1deb36aebe601b/c?url=http://gerakl24.ru>Ремонт фундамента Красноярск</a>
    17.05.2021 05:20:22
    Avatar of Useful tipsUseful tips

    I really like your blog.. very nice colors &amp; theme. Did you make this website yourself or did you hire someone to do it for you? Plz reply as I'm looking to create my own blog and would like to find out where u got this from. thanks a lot Useful tips fiudi.sewomabest.com/useful-tips/
    17.05.2021 11:35:56
    Avatar of BragisMoinidsBragisMoinids
    EmyankaMoinids
    18.05.2021 01:27:05
    Avatar of sototron279gaxsototron279gax
    Скоро ожидается выход планшета Xiaomi Mi Pad 5. И если он выйдет то ценник будет чуть ниже чем у айпада последнего поколения. Почитав <a href=> обзор Xiaomi Mi Pad 5</a> получилось двоякое мнение.
    18.05.2021 02:29:22
    Avatar of elvians2elvians2
    Daily updated super sexy photo galleries
    http://privatemilfpics.xxxwwwvidoe.instasexyblog.com/?margarita

    just free porn virgin streams old 35mm porn flicks online free porn animal sex tv free streaming porn video xnxx saw 3 porn

    18.05.2021 03:12:45
    Avatar of ZacharyScorbZacharyScorb
    <a href=https://weighttogo.online>How to lose weight overnight</a>
    18.05.2021 04:54:57
    Avatar of NewsNews

    Hola! I've been following your blog for some time now and finally got the courage to go ahead and give you a shout out from Atascocita Tx! Just wanted to say keep up the good job! News boorst.sewomabest.com/news/
    18.05.2021 09:46:45
    Avatar of RichardnedRichardned

    18.05.2021 10:41:46
    Avatar of RichardnedRichardned
    <a href=https://www.krutidevunicodeconverter.com>krutidev to unicode converter</a>
    18.05.2021 02:16:35
    Avatar of kattmat royal canin onlinekattmat royal canin online

    Greetings, I think your website may be having web browser compatibility problems. Whenever I look at your website in Safari, it looks fine however when opening in IE, it's got some overlapping issues. I merely wanted to provide you with a quick heads up! Besides that, great site! kattmat royal canin online gimna.wommintpri.com/map2.php
    18.05.2021 02:44:39
    Avatar of RichardnedRichardned

    18.05.2021 03:29:59
    Avatar of RichardnedRichardned

    18.05.2021 04:14:14
    Avatar of RichardnedRichardned

    18.05.2021 04:34:00
    Avatar of RelaxationRelaxation

    I do not know if it's just me or if everybody else experiencing problems with your website. It appears as though some of the written text in your posts are running off the screen. Can somebody else please comment and let me know if this is happening to them too? This might be a issue with my web browser because I've had this happen before. Appreciate it Relaxation hombwh.teswomango.com/relaxation/
    Captcha Обновить
    Go Top