Для отправки электронной почты используется функция mail (), которая имеет следующий вид:
boolean mail(string $to, string $subject, string $msg [, string $header]);
У данной функции 4 параметра, три из них являются обязательными: адресат $to, тема $subject и содержание $msg. В четвертом необязательном параметре $header можно указать заголовки вашего сообщения. Если требуется отправить письмо нескольким получателям, то их адреса должны быть перечислены в строке через запятую;
mail(' Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ', 'any subject', 'stroka1nstroka2nstroka3');
Предыдущие параметры позволяют задать только основные свойства письма, но их может быть намного больше.
Дополнительные свойства указываются в последнем параметре и разделяются символами конца строки и перевода каретки (CR и LF).
Если вы разрабатываете систему рассылки новостей по электронной почте, то здесь может возникнуть одна серьезная проблема: если список достаточно большой, то процедура рассылки может занять слишком много времени, более 30 секунд, которые отводятся сервером на выполнение сценария. В случае превышения этого значение его работа будет прервана. На практике оказывается, что при списке рассылки в 1000 записей 30 секунд не хватает, поэтому если имеется такая возможность, необходимо увеличить время выполнения сценария.
Изменять конфигурацию интерпретатора в данном случае будет не лучшим решением. Если тайм-аут слишком большой, то в системе может оказаться много зациклившихся сценариев, которые будут расходовать процессорное время. Лучшим вариантом будет увеличить тайм-аут для определенного сценария. Для этого можно воспользоваться функцией set_time_out(), которая передает новое значение тайм-аута в секундах для текущего сценария. Следующий показывает, как можно установить тайм-аут в 10 минут:1
set_time_out(600);
Решение проблемы кодировок
Стандартная функция отправки почты в PHP не заботится о кодировке письма, а специальные классы отправки писем могут показаться слишком тяжеловесным решением. Ниже приведена простая функция, которая позволяет отправлять MIME-совместимые письма на русском языке.
Тело письма может быть текстом в любой кодировке. Несколько хуже дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования - BASE64 и Quoted-Printable. BASE64 более универсален и работает для кодировки UTF-8, поэтому была выбрана именно эта форма. MIME-совместимый почтовый клиент, как правило, умеет читать обе формы.
<?phpВ данном примере была определена функция mime_header_encode() для преобразования каждого заголовка в MIME-совместимый формат, несмотря на то, что в PHP предусмотрена аналогичная функция mb_encode_mimeheader(). От встроенной функции пришлось отказаться, так как сервере с php 5.1.6 она работает некорректно.
function send_mime_mail($name_from, // имя отправителя
$sender , // email отправителя
$name_to, // имя получателя
$destination, // email получателя
$data_charset, // кодировка переданных данных
$send_charset, // кодировка письма
$subject, // тема письма
$msg // текст письма
) {
$to = mime_header_encode($name_to, $data_charset, $send_charset)
. ' <' . $destination . '>';
$subject = mime_header_encode($subject, $data_charset, $send_charset);
$from = mime_header_encode($name_from, $data_charset, $send_charset)
.' <' . $sender . '>';
if($data_charset != $send_charset) {
$msg = iconv($data_charset, $send_charset, $msg);
}
$headers = "From: $from\r\n";
$headers .= "Content-type: text/plain; charset=$send_charset\r\n";
return mail($to, $subject, $msg, $headers);
}
function mime_header_encode($str, $data_charset, $send_charset) {
if($data_charset != $send_charset) {
$str = iconv($data_charset, $send_charset, $str);
}
return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
}
?>
В случае, если кодировка отправки письма отличается от текущей кодировки данных, используется iconv() для преобразования кодировки.
Пример выполнения фнции:
<?php
send_mime_mail('Автор письма',
' Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ',
'Получатель письма',
' Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ',
'CP1251', // кодировка, в которой находятся передаваемые строки
'KOI8-R', // кодировка, в которой будет отправлено письмо
'Заголовок письма - тема',
"Некоторый текст письма!");
?>





