Отправляет электронную почту

# mail

(PHP 4, PHP 5, PHP 7, PHP 8)

mail — Отправляет электронную почту

### Описание

function mail(
string `$to`,
string `$subject`,
string `$message`,
array|string `$additional_headers` = [],
string `$additional_params` = ""
): bool

Отправляет электронную почту.

### Список параметров

`to`

  Получатель, или получатели письма.

  Формат строки по правилам стандарта » RFC 2822. Примеры:

  - user@example.com
  - user@example.com, anotheruser@example.com
  - User
  - User , Another User
`subject`

  Тема отправляемого письма.

  Предостережение

  Тема должна удовлетворять правилам стандарта » RFC 2047.

`message`

  Отправляемое сообщение.

  Каждая строка должна быть отделена комбинацией символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.

  Предостережение

  (Только для Windows) Если при прямом обращении PHP к SMTP-серверу в начале строки обнаружена обозначающая конец предложения точка, она удаляется. Чтобы противодействовать этому, эти вхождения заменяют двойной точкой.

      <?php

      $text = str_replace("\n.", "\n..", $text);

      ?>

`additional_headers` (необязательный)

  Строка или массив, которые будут вставлены в конец заголовка письма.

  Чаще этим пользуются, чтобы добавить дополнительные заголовки (From, Cc, и Bcc). Дополнительные заголовки разделяют комбинацией символов CRLF (\r\n). Если в составлении заголовка участвуют внешние данные, их очищают, чтобы исключить риск внедрения нежелательных заголовков.

  Если передан массив, то его ключи будут именами заголовка, а значения значениями.

  > Замечание:

  > Отправляемое письмо должно содержать заголовок `From`. Его устанавливают через параметр `additional_headers` или задают значение по умолчанию в файле php.ini.

  > Если заголовок отсутствует, будет выдано сообщение об ошибке наподобие `Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing`. Заголовок `From` также определяет заголовок `Return-Path` при прямой отправке через SMTP-сервер (только Windows).

  > Замечание:

  > Если сообщения не отправляются, пробуют указать только символ LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют символ перевода строки LF на комбинацию символов CRLF (что удваивает символ возврата каретки CR, если было указано CRLF). Эту меру выбирают в крайнем случае, поскольку она не соответствует стандарту » RFC 2822.

`additional_params` (необязательный)

  Параметр `additional_params` задают, чтобы передать дополнительные флаги в виде аргументов командной строки для программы, настроенной в директиве `sendmail_path` для отправки писем. Например, этим пользуются при отправке письма агентом sendmail с аргументом `-f`, чтобы установить адрес отправителя конверта.

  Параметр автоматически экранируется функцией escapeshellcmd(), чтобы предотвратить выполнение команды. Функция escapeshellcmd() исключает выполнение команды, но разрешает дополнительные параметры. По соображениям безопасности рекомендовано очищать этот параметр, чтобы не допустить добавления нежелательных параметров в команду командной оболочки.

  Поскольку функция escapeshellcmd() обрабатывает параметр автоматически, часть символов, разрешённых интернет-стандартами в качестве адресов электронной почты, нельзя указывать. Функция mail() не разрешает такие символы, поэтому в программах, в которых они требуются, рекомендовано использовать альтернативы для их отправки (например, фреймворки или библиотеки).

  Пользователь, от имени которого запущен веб-сервер, должен быть добавлен в конфигурацию агента sendmail в качестве доверенного пользователя, чтобы предотвратить добавление заголовка «X-Warning» в сообщение, когда отправитель конверта установлен через аргумент (-f). Для пользователей агента sendmail — это файл /etc/mail/trusted-users.

### Возвращаемые значения

Возвращает `true`, если письмо было принято для передачи, иначе `false`.

То, что письмо было принято для передачи, не значит, что оно достигнет получателя.

### Список изменений

Версия | Описание
--- | ---
7.2.0 | Параметр `additional_headers` теперь принимает массив.

### Примеры

Пример #1 Отправка письма.

Вызов функции mail() для отправки простого письма:

    <?php

    // Сообщение
    $message = "Line 1\r\nLine 2\r\nLine 3";

    // На случай если какая-то строка письма длиннее 70 символов, вызовем функцию wordwrap()
    $message = wordwrap($message, 70, "\r\n");

    // Отправляем
    mail('caffeinated@example.com', 'My Subject', $message);

    ?>

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:

    <?php

    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com' . "\r\n" .
        'Reply-To: webmaster@example.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);

    ?>

Пример #3 Отправка письма с дополнительными заголовками, переданными массивом

В этом примере посылается то же письмо, что и в примере выше, но дополнительные заголовки задаются массивом (доступно с PHP 7.2.0).

    <?php

    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = array(
        'From' => 'webmaster@example.com',
        'Reply-To' => 'webmaster@example.com',
        'X-Mailer' => 'PHP/' . phpversion()
    );

    mail($to, $subject, $message, $headers);

    ?>

Пример #4 Отправка письма с дополнительными аргументами командной строки.

Параметр `additional_params` указывают, чтобы передать дополнительный аргумент программе, настроенной в директиве `sendmail_path` для отправки писем.

    <?php

    mail('nobody@example.com', 'the subject', 'the message', null,
       '-fwebmaster@example.com');

    ?>

Пример #5 Отправка HTML-сообщения

Функцией mail() можно также отправить электронное письмо в формате HTML.

    <?php

    // Несколько получателей
    $to = 'johny@example.com, sally@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>Johny</td><td>10th</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';
    $headers[] = 'Content-type: text/html; charset=iso-8859-1';

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

    // Отправляем
    mail($to, $subject, $message, implode("\r\n", $headers));

    ?>

> Замечание:

> Для отправки HTML-сообщений или других сложных электронных писем рекомендована установка PEAR-пакета » PEAR::Mail_Mime.

### Примечания

> Замечание:

> Реализация SMTP (только Windows) функции mail() в Windows во многом отличается от реализации в агенте sendmail. Во-первых, она не использует локальную программу для составления писем, а работает непосредственно с сокетами, что означает что необходим почтовый агент (`MTA`), ожидающий соединений на сокете (который может быть как на локальной, или localhost, так и на удалённой машине).

> Во-вторых, дополнительные заголовки наподобие: `From:`, `Cc:`, `Bcc:` и `Date:` интерпретируются в первую очередь не почтовым агентом `MTA`, а PHP.

> Поэтому параметр `to` не должен быть адресом вида "Something <someone@example.com>". Команда mail может неправильно интерпретировать этот адрес во время передачи данных почтовым агентом MTA.

> Замечание:

> Функция mail() не рекомендована для отправки большого количества писем в цикле. Функция открывает и закрывает SMTP-сокет для каждого письма, что не очень эффективно.

> Для отправки большого количества сообщений обратите внимание на пакеты » PEAR::Mail и » PEAR::Mail_Queue.

> Замечание:

> Полезные RFC: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049 и » RFC 2822.

### Смотрите также

- mb_send_mail() - Отправляет закодированное электронное письмо
- imap_mail() - Отправляет сообщение
- » PEAR::Mail
- » PEAR::Mail_Mime

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open