Форматирование этой строки должно соответствовать » RFC 2822 . Некоторые примеры:
Тема отправляемого электронного письма.
Тема должна соответствовать » RFC 2047 .
Каждая строка должна быть отделена CRLF (\r\n).Строки не должны быть больше 70 символов.
(Только для Windows) Когда PHP обращается к SMTP-серверу напрямую, если точка находится в начале строки, она удаляется. Чтобы противодействовать этому, замените эти вхождения двойной точкой.
$text = str_replace("\n.", "\n..", $text); ?>
Строка или массив для вставки в конец заголовка письма.
Обычно это используется для добавления дополнительных заголовков (From,Cc и Bcc).Несколько дополнительных заголовков должны быть разделены с помощью CRLF (\r\n).Если для составления этого заголовка используются внешние данные,данные должны быть продезинфицированы таким образом,чтобы не вводить нежелательные заголовки.
Если передается массив,его ключами являются имена заголовков,а значениями-соответствующие значения заголовков.
Note:
До PHP 5.4.42 и 5.5.27, соответственно, additional_headers не имело защиты от внедрения заголовка почты. Поэтому пользователи должны убедиться, что указанные заголовки безопасны и содержат только заголовки. т.е. никогда не начинайте тело сообщения с нескольких символов новой строки.
Note:
При отправке почты письмо должно содержать заголовок From . Это может быть установлено с помощью параметра additional_headers , или значение по умолчанию может быть установлено в php.ini .
В противном случае появится сообщение об ошибке, подобное Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing . From заголовка устанавливает также Return-Path при отправке непосредственно через SMTP (только для Windows).
Note:
Если сообщения не получены, попробуйте использовать только LF (\n). Некоторые агенты передачи почты Unix (в первую очередь » qmail ) автоматически заменяют LF на CRLF (что приводит к удвоению CR при использовании CRLF). Это должно быть последним средством, поскольку оно не соответствует » RFC 2822 .
Параметр additional_params можно использовать для передачи дополнительных флагов в качестве параметров командной строки программе, настроенной для использования при отправке почты, как определено параметром конфигурации sendmail_path . Например, это можно использовать для установки адреса отправителя конверта при использовании sendmail с параметром -f sendmail.
Этот параметр экранируется функцией escapeshellcmd () внутри, чтобы предотвратить выполнение команды. escapeshellcmd () предотвращает выполнение команды, но позволяет добавлять дополнительные параметры. По соображениям безопасности пользователю рекомендуется очистить этот параметр, чтобы избежать добавления нежелательных параметров в команду оболочки.
Поскольку функция escapeshellcmd () применяется автоматически, некоторые символы, разрешенные в качестве адресов электронной почты в RFC в Интернете, использовать нельзя. mail () не может допускать такие символы, поэтому в программах, где требуется использование таких символов, рекомендуется использовать альтернативные способы отправки электронных писем (например, использование фреймворка или библиотеки).
Пользователь, от имени которого работает веб-сервер, должен быть добавлен в качестве доверенного пользователя в конфигурацию sendmail, чтобы предотвратить добавление заголовка X-Warning к сообщению, когда с помощью этого метода установлен отправитель конверта (-f). Для пользователей sendmail это файл /etc/mail/trusted-users .
Return Values
Возвращает true , если письмо было успешно принято для доставки, иначе false .
Важно отметить,что только потому,что почта была принята к доставке,это НЕ означает,что почта действительно достигнет предполагаемого места назначения.
Changelog
PHP mail() Function
The mail() function allows you to send emails directly from a script.
Syntax
Parameter Values
Parameter | Description |
---|---|
to | Required. Specifies the receiver / receivers of the email |
subject | Required. Specifies the subject of the email. Note: This parameter cannot contain any newline characters |
message | Required. Defines the message to be sent. Each line should be separated with a LF (\n). Lines should not exceed 70 characters. |
Windows note: If a full stop is found on the beginning of a line in the message, it might be removed. To solve this problem, replace the full stop with a double dot:
$txt = str_replace(«\n.», «\n..», $txt);
?>
Note: When sending an email, it must contain a From header. This can be set with this parameter or in the php.ini file.
Technical Details
Return Value: | Returns the hash value of the address parameter, or FALSE on failure. Note: Keep in mind that even if the email was accepted for delivery, it does NOT mean the email is actually sent and received! |
---|---|
PHP Version: | 4+ |
PHP Changelog: | PHP 7.2: The headers parameter also accepts an array PHP 5.4: Added header injection protection for the headers parameter. PHP 4.3.0: (Windows only) All custom headers (like From, Cc, Bcc and Date) are supported, and are not case-sensitive. PHP 4.2.3: The parameter parameter is disabled in safe mode PHP 4.0.5: The parameter parameter was added |
More Examples
Send an email with extra headers:
$to = «somebody@example.com»;
$subject = «My subject»;
$txt = «Hello world!»;
$headers = «From: webmaster@example.com» . «\r\n» .
«CC: somebodyelse@example.com»;
?php
$to = «somebody@example.com, somebodyelse@example.com»;
$subject = «HTML email»;
?php
$message = »
This email contains HTML Tags!
Firstname | Lastname |
---|---|
John | Doe |
«;
// Always set content-type when sending HTML email
$headers = «MIME-Version: 1.0» . «\r\n»;
$headers .= «Content-type:text/html;charset=UTF-8» . «\r\n»;
// More headers
$headers .= ‘From: ‘ . «\r\n»;
$headers .= ‘Cc: myboss@example.com’ . «\r\n»;
Отправка почты средствами PHP
Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- E-mail получателя
- Заголовок письма
- Текст письма
- Дополнительные заголовки письма
- Дополнительные параметры командной строки
- true, если письмо было принято к доставке
- false, в противном случае.
Простейший пример
Перейдем к более сложному примеру
Текст письма 1-ая строчка 2-ая строчка '; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers . ; $headers .= "Reply-To: reply-to@example.com\r\n"; mail($to, $subject, $message, $headers); ?>
В начале мы определяем кому адресовано письмо, за это отвечает переменная &to, если же получателей несколько человек, то записываем через запятую адреса эл. почты.
Переменные $subject и $message, не буду описывать, это и так понятно.
- В первой строчке ми определяем ты отправляемого письма-HTML и кодировку windows-1251.
- В 2-ом мы указываем от кого пришло письмо.
- В 3-ем указываем e-mail адрес, для ответа на письмо.
А теперь самое интересное отправка письма c вложением (attachment)
$subject = "тема письма"; $message ="Текст сообщения"; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = "file.doc"; // название файла $filepath = "files/file.doc"; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = "--".md5(uniqid(time())); // генерируем разделитель $mailheaders = "MIME-Version: 1.0;\r\n"; $mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // разделитель указывается в заголовке в параметре boundary $mailheaders . ; $mailheaders .= "Reply-To: $user_email\r\n"; $multipart = "--$boundary\r\n"; $multipart .= "Content-Type: text/html; charset=windows-1251\r\n"; $multipart .= "Content-Transfer-Encoding: base64\r\n"; $multipart .= \r\n; $multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message))); // первая часть само сообщение // Закачиваем файл $fp = fopen($filepath,"r"); if (!$fp) < print "Не удается открыть файл22"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "\r\n--$boundary\r\n"; $message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; $message_part .= "Content-Transfer-Encoding: base64\r\n"; $message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; $message_part .= \r\n; $message_part .= chunk_split(base64_encode($file)); $message_part .= "\r\n--$boundary--\r\n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо //удаляем файлы через 60 сек. if (time_nanosleep(5, 0)) < unlink($filepath); >// удаление файла