Отправка 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
    День добрый.
    Спасибо за ресурс.
    17.03.2019 11:49:57
    Avatar of gazandstgazandst
    Присоединяюсь. И я с этим столкнулся. Давайте обсудим этот вопрос. Здесь или в PM.

    ---
    Что-то меня уже не на ту тему понесло. скачать fifa, скачать фифа и <a href=http://15fifa.ru/raznoe-fifa-15/32-zvuk-fifa-15-mezhdunarodnye-kommentatory-skachat.html>fifa 15 комментаторы скачать</a> скачать fifa
    18.03.2019 05:02:39
    Avatar of DanielNusDanielNus
    Forex Trader predicts and makes $10,000 less than 3 hours: https://tinyurl.com/15000investbinarycrypto51047
    18.03.2019 08:21:20
    Avatar of AntonioaiyAntonioaiy
    Приветствую Вас господа<a href=http://sfilm.by/>!</a>
    Предлагаем Вашему вниманию высококачественные профессиональные плёнки.
    Наша организация"ООО Защитные плёнки" работает 15 лет на рынке этой продукции в Беларуси.
    Мы можем предложить Вам <a href=http://sfilm.by>Защитные плёнки</a> ,<a href=http://sfilm.by>архитектурные плёнки</a>,<a href=http://sfilm.by>декоративные плёнки</a>,<a href=http://sfilm.by>автомобильные плёнки</a> и <a href=http://sfilm.by>противопожарные плёнки</a>.
    Более подробная информация размещена на нашем <a href=http://sfilm.by>сайте</a>
    С уважением,коллектив "ООО Защитные плёнки".
    http://www.hikvision.msk.ru/index/8-36813
    http://podnebese.ru/index/8-31398
    https://www.steroidology.com/forum/members/pavloschy.html
    http://expolon.xf.cz/profile.php?lookup=7671
    http://sklad-24.ru/blog/user/Patriotbet/
    20.03.2019 02:03:50
    Avatar of YollofahYollofah
    Prince William County and its partner nonprofits will use the annual assessment to reapply for grants administered by the U.S. Department of Housing and
    <a href=http://gaselectricity.in/2018-mazda-cx-5-mazda-suv-cx-5-reviews-cx-5-suv>creature comforts</a>
    Cbn's directive on use of foreign currency, a confusing signal - business - nigeria gas vs diesel rv
    23.03.2019 12:51:21
    Avatar of YollofahYollofah
    Arizona Senator John McCain, Obama's general election opponent and a leading voice within the Republican Party, says he would not vote for the American
    <a href=http://gaselectricity.in/best-probiotic-for-women-food-supplement-for-fun>feminine issues</a>
    Review the cher show la gasolina
    23.03.2019 09:57:56
    Avatar of uixixeolauixixeola
    a29uc2VydnMuY29t <a href='http://theprettyguineapig.com/generic-cialis/#erupimaex-a'>erupimaex-a.anchor.com</a> [URL=http://theprettyguineapig.com/generic-cialis/#erupimaex-u]erupimaex-u.anchor.com[/URL] http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t http://theprettyguineapig.com/generic-cialis/#erupimaex-t ixexun
    23.03.2019 09:57:59
    Avatar of oxutacoxutac
    a29uc2VydnMuY29t <a href='http://theprettyguineapig.com/generic-cialis/#fegabeera-a'>fegabeera-a.anchor.com</a> [URL=http://theprettyguineapig.com/generic-cialis/#fegabeera-u]fegabeera-u.anchor.com[/URL] http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t http://theprettyguineapig.com/generic-cialis/#fegabeera-t irigueybi
    23.03.2019 09:58:01
    Avatar of uqujigukuqujiguk
    a29uc2VydnMuY29t <a href='http://theprettyguineapig.com/generic-cialis/#amaqen-a'>amaqen-a.anchor.com</a> [URL=http://theprettyguineapig.com/generic-cialis/#amaqen-u]amaqen-u.anchor.com[/URL] http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t http://theprettyguineapig.com/generic-cialis/#amaqen-t atomiho
    26.03.2019 06:36:14
    Avatar of JosephtealmJosephtealm
    A major Greenland glacier that was one of the fastest shrinking ice and snow masses on Earth is growing again, a new NASA study finds.

    The Jakobshavn (YA-cob-shawv-en) glacier around 2012 was retreating about 1.8 miles (3 kilometers) and thinning nearly 130 feet (almost 40 meters) annually. But it started growing again at about the same rate in the past two years, according to a study in Monday's Nature Geoscience . Study authors and outside scientists think this is temporary.

    "That was kind of a surprise. We kind of got used to a runaway system," said Geological Survey of Denmark and Greenland ice and climate scientist Jason Box. "The good news is that it's a reminder that it's not necessarily going that fast. But it is going."

    Box, who wasn't part of the study, said Jakobshavn is "arguably the most important Greenland glacier because it discharges the most ice in the northern hemisphere. For all of Greenland, it is king."

    A natural cyclical cooling of North Atlantic waters likely caused the glacier to reverse course, said study lead author Ala Khazendar, a NASA glaciologist on the Oceans Melting Greenland (OMG) project. Khazendar and colleagues say this coincides with a flip of the North Atlantic Oscillation — a natural and temporary cooling and warming of parts of the ocean that is like a distant cousin to El Nino in the Pacific.

    The water in Disko Bay, where Jakobshavn hits the ocean, is about 3.6 degrees cooler (2 degrees Celsius) than a few years ago, study authors said.

    While this is "good news" on a temporary basis, this is bad news on the long term because it tells scientists that ocean temperature is a bigger player in glacier retreats and advances than previously thought, said NASA climate scientist Josh Willis, a study co-author. Over the decades the water has been and will be warming from man-made climate change, he said, noting that about 90 percent of the heat trapped by greenhouse gases goes into the oceans.

    "In the long run we'll probably have to raise our predictions of sea level rise again," Willis said.

    Think of the ocean temperatures near Greenland like an escalator that's rising slowly from global warming, Khazendar said. But the natural North Atlantic Oscillation sometimes is like jumping down a few steps or jumping up a few steps. The water can get cooler and have effects, but in the long run it is getting warmer and the melting will be worse, he said.

    (<a href=http://www.zxprinter.com/catalog-printing>catalog printing</a> <a href=http://www.zxprinter.com>printing in China</a>).

    Four outside scientists said the study and results make sense.

    University of Washington ice scientist Ian Joughin, who wasn't part of the study and predicted such a change seven years ago, said it would be a "grave mistake" to interpret the latest data as contradicting climate change science.

    What's happening, Joughin said, is "to a large extent, a temporary blip. Downturns do occur in the stock market, but overall the long term trajectory is up. This is really the same thing."
    Captcha Обновить
    Go Top