Приднестровская поддержка XOOPS
Отправить письма с сайта позволяет функция mail(). Функция имеет следующий формат:
mail(<E-mail получателя>, <Тема>, <Сообщение>, [<Заголовки>]);
Функция возвращает true, если письмо отправлено. Если PHP работает в режиме Safe Mode, то функция mail() всегда возвращает false, даже если письмо отправлено.
В параметре <Заголовки> обычно указываются следующие заголовки:
□ From — имя и обратный адрес отправителя:
From: Nik <unicross@mail.ru>
□ Content-Type — MIME-тип и кодовая таблица:
Content-Type: text/html; charset=windows-1251
Заголовки должны быть разделены комбинацией символов \r\n. Если в тексте заголовков присутствуют русские буквы, то текст следует зашифровать с помощью метода base64 следующим образом:
=?<Кодировка>?B?<Зашифрованный текст>?=
Зашифровать текст с помощью метода base64 позволяет функция base64_encode().
$tema = "Сообщение";
$tema = "=?windows-1251?B?" . base64_encode($tema) . "?=";
Зашифровать текст в кодировке UTF-8 позволяет функция mb_encode_mimeheader(). Функция имеет следующий формат:
mb_encode_mimeheader(<Строка>, [<Кодировка>], [<Метод кодирования>],
[<Символ переноса строк>]);
Если параметр <Кодировка> не указан, то используется значение, указанное в функции mb_internal_encoding(). Как показывает практика, указывать кодировку в функции mb_internal_encoding() нужно обязательно. Параметр <Метод кодирования> может принимать значения "B" (Base64) или "Q" (Quoted-Printable). Если параметр не указан, то используется значение "B".
Параметр <Символ переноса строк> задает символ для разделения строк. По умолчанию предполагается комбинация "\r\n". Пример:
mb_internal_encoding('UTF-8');
$tema = 'Сообщение';
echo mb_encode_mimeheader($tema);
// Выведет: =?UTF-8?B?0KHQvtC+0LHRidC10L3QuNC1?=
Текст сообщения шифровать необязательно. А вот кодовую таблицу символов следует указать в заголовке Content-Type. Также следует учитывать, что длина одной строки не должна превышать 70 символов. Строки отделяются друг от друга символом перевода строки (\n).
Любое письмо может быть отправлено в виде обычного текста (листинг 57), а также в формате HTML (листинг 58). В первом случае указывается MIME-тип text/plain, а во втором — text/html.
В качестве примера отправим письмо с подтверждением регистрации.
Листинг 57. Пример отправки письма в виде обычного текста
<?php
$msg = "Добрый день!\n\n";
$msg .= "Вы успешно зарегистрированы.\n\n";
$msg .= "http://www.site.ru/\n";
$msg .= "support@site.ru";
$Ot = "Суппорт";
$Ot = "=?windows-1251?B?" . base64_encode($Ot) . "?=";
$header = "Content-Type: text/plain; charset=windows-1251\r\n";
$header .= "From: " . $Ot . " <support@site.ru>";
$tema = "Сообщение";
$tema = "=?windows-1251?B?" . base64_encode($tema) . "?=";
mail("vasya@mail.ru", $tema, $msg, $header);
?>
Отправленное письмо (с заголовками) будет выглядеть следующим образом:
To: vasya@mail.ru
Subject: =?windows-1251?B?0e7u4fnl7ejl?=
Content-Type: text/plain; charset=windows-1251
From: =?windows-1251?B?0fPv7+7w8g==?= <support@site.ru>
Добрый день!
Вы успешно зарегистрированы.
http://www.site.ru/
support@site.ru
Листинг 58. Пример отправки письма в формате HTML
<?php
$msg = "Добрый день!<br><br>\n";
$msg .= "Вы успешно зарегистрированы.<br><br>\n";
$msg .= "<a href="http://www.site.ru/">http://www.site.ru/</a><br>\n";
$msg .= "support@site.ru";
$Ot = "Суппорт";
$Ot = "=?windows-1251?B?" . base64_encode($Ot) . "?=";
$header = "Content-Type: text/html; charset=windows-1251\r\n";
$header .= "From: " . $Ot . " <support@site.ru>";
$tema = "Сообщение";
$tema = "=?windows-1251?B?" . base64_encode($tema) . "?=";
mail("vasya@mail.ru", $tema, $msg, $header);
?>
При изучении работы с файлами мы создали файл file.txt со списком рассылки и механизм работы с ним (см. разд. 25.4). Теперь рассмотрим возможность рассылки писем по E-mail-адресам из этого файла (листинг 59).
Листинг 59. Рассылка писем
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="hidden" name="send" value="1">
<input type="submit" value="Разослать">
</form>
<?php
if (isset($_GET["send"])) {
$email = file('file.txt') or die('Файл не найден');
$msg = "Добрый день!\n\n";
$msg .= "Новости нашего сайта.\n\n";
$msg .= "http://www.site.ru/\n";
$msg .= "mail@site.ru";
$header = "Content-Type: text/plain; charset=windows-1251\r\n";
$header.="From: news <mail@site.ru>";
$tema = "Новости сайта";
$tema = "=?windows-1251?B?" . base64_encode($tema) . "?=";
for ($i=0, $c=count($email); $i<$c; $i++) {
$email[$i] = trim($email[$i]);
if (preg_match('/^([a-z0-9_.-]+)@([a-z0-9-]+\.)+[a-z]{2,6}$/is',
$email[$i])) {
@mail($email[$i], $tema, $msg, $header);
}
}
echo "Сообщения разосланы";
}
?>
При нажатии кнопки Разослать на все E-mail из файла будет отправлено письмо.
Обратите внимание, на локальной машине письма отправлены не будут, так как мы не устанавливали программу отправки писем — sendmail. На сервере хостинг-провайдера данная программа практически всегда установлена и настроена. Правда, количество одновременно отправленных писем часто ограничено.
При рассылке в письме обязательно должна быть предусмотрена возможность отписаться от рассылки. И запомните — рассылка спама в Интернете запрещена. Под спамом понимаются письма, не запрошенные явным образом получателем.
Отправитель | Нити |
---|
6 пользователь(ей) активно (3 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 6 далее... |