Отправка почты средствами PHP

PHP
Приветствую всех читателей!
Хочу немного написать про проблему, с которой я столкнулся при разработке одного проекта. Суть в том, что почта, отправляемая стандартной функцией PHP mail() никак не хотела отправляться в формате «content-type: text/html».

Если быть точнее, эта проблема возникла у меня на хостинге от компании HvOSTING.UA.
Был взят пример отправки письма с официальной документации PHP. Но, вместо получения примера с html кодом приходил plaintext, в котором были дополнительные заголовки.

Пример кода с сайта php.net

<?php
// несколько получателей
$to  = 'aidan@example.com' . ', '; // обратите внимание на запятую
$to .= 'wez@example.com';

// тема письма
$subject = 'Birthday Reminders for August';

// текст письма
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Дополнительные заголовки
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Отправляем
mail($to, $subject, $message, $headers);
?>


На том же сайте php.net есть такая маленькая строка, на которую я не сразу обратил внимание. Она гласит:
«Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые некачественные агенты пересылки сообщений Unix заменяют LF на CRLF автоматически (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822. ».

И действительно, на это замечание следует обратить своё внимание!!! Изменяю код и о чудо! Всё работает. Добавлю ещё, что письма у меня отправлялись в формате UTF-8. Для этого в исходном коде нужно charset=iso-8859-1 заменить на charset=utf-8.

Вот собственно говоря и всё.
Для примера приведу кусок моего кода.

<?php
// несколько получателей
$to  = 'aidan@example.com' . ', '; // обратите внимание на запятую
$to .= 'wez@example.com';

// тема письма
$subject = 'Birthday Reminders for August';

// текст письма
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers  = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\n";

// Дополнительные заголовки
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\n";

// Отправляем
mail($to, $subject, $message, $headers);
?>

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus