(PHP 4, PHP 5)
mail — Отправляет электронную почту
$to
, string $subject
, string $message
[, string $additional_headers
[, string $additional_parameters
]] )Отправляет электронную почту.
to
Получатель, или получатели письма.
Формат этого параметра должен соответствовать » RFC 2822. Несколько примеров:
subject
Тема отправляемого письма.
Тема должна соответствовать » RFC 2047.
message
Отправляемое сообщение.
Каждая строка должна быть отделена сиволом LF (\n). Строки не должны быть длиннее 70 символов.
(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените все такие точки на две.
<?php
$text = str_replace("\n.", "\n..", $text);
?>
additional_headers
(необязательный)Строка, которая будет дополнительно вставлена в конец отправляемых заголовков письма.
Обычно используется для добавления дополнительных заголовков (From, Cc, and 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 в Windows.
Замечание:
Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.
additional_parameters
(необязательный)
Параметр additional_parameters
может быть
использован для передачи дополнительных флагов в виде аргументов
командной строки для программы сконфигурированной для отправки писем,
указанной директивой sendmail_path. Например, можно
установить отправителя письма при использовании sendmail с помощью опции
-f.
Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка 'X-Warning' при указании отправителя с помощью опции (-f). Для пользователей sendmail - это файл /etc/mail/trusted-users.
Возвращает TRUE
, если письмо было принято для передачи, иначе FALSE
.
Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает что оно достигло получателя.
Версия | Описание |
---|---|
4.3.0 (только для Windows) | Теперь поддерживаются все дополнительные заголовки (такие как From, Cc, Bcc и Date), и являются регистро-независимыми. (Так как дополнительные заголовки интерпретируются не почтовым агентом, а PHP, PHP < 4.3 поддерживал только заголовок Cc и был регистро-зависимый). |
4.2.3 |
Параметр additional_parameters отключен в
режиме safe_mode и при
его использовании функция mail() вызовет
предупреждение и вернет FALSE .
|
4.0.5 |
Был добавлен параметр additional_parameters .
|
Пример #1 Отправка письма.
Использование функции mail() для отправки простого письма:
<?php
// Сообщение
$message = "Line 1\nLine 2\nLine 3";
// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap($message, 70);
// Отправляем
mail('[email protected]', 'My Subject', $message);
?>
Пример #2 Отправка письма с дополнительными заголовками.
Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:
<?php
$to = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Пример #3 Отправка письма с дополнительными аргументами командной строки.
Параметр additional_parameters
может быть использован
для передачи дополнительных параметров программе, используемой для отправки
писем с помощью директивы sendmail_path.
<?php
mail('[email protected]', 'the subject', 'the message', null,
'[email protected]');
?>
Пример #4 Отправка HTML-сообщения
С помощью функции mail() также можно отправить и HTML-письмо.
<?php
// несколько получателей
$to = '[email protected]' . ', '; // обратите внимание на запятую
$to .= '[email protected]';
// тема письма
$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 <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";
// Отправляем
mail($to, $subject, $message, $headers);
?>
Замечание:
Для отправки HTML или других комплексных сообщений рекомендуется использовать PEAR-пакет » PEAR::Mail_Mime.
Замечание:
Реализация функции mail() в Windows во многом отличается от реализации в Unix. Во-первых, она не использует локальную программу для составления писем, а работает непосредственно с сокетами, что означает что необходим почтовый агент (MTA), ожидающий соединенй на сокете (может быть как на локальном так и на удаленном сервере).
Во-вторых, дополнительные заголовки вроде: From:, Cc:, Bcc: и Date: интерпретируются в первую очередь не, MTA, а PHP.
Поэтому параметр
to
не должен быть адресом вида "Something <[email protected]>". Команда mail может неправильно интерпретировать этот адрес во время передачи данных MTA.
Замечание:
Не следует использовать функцию mail() для отправки большого количества писем в цикле. Функция открывает и закрывает соединение с SMTP-сервером для каждого письма, что не очень эффективно.
Для отправки большого количества сообщений обратите внимание на пакеты » PEAR::Mail и » PEAR::Mail_Queue.
Замечание:
Полезные RFC: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049 и » RFC 2822.