Jump to content
  • 0

Рассылка писем


kilogram
 Share

Question

Читаю Котова, там приводится такой код.

Файл index.php


<?php ## Отправка почты по шаблону (без кодирования).
// Подключаем функцию mailx() (см. ниже).
include_once "mailx.php";
include_once "mailenc.php";
// Этот текст может быть получен, например, из базы данных,
// или являться сообщением форума или гостевой книги.
$text = "Cookies need love like everything does.";
// Получатели письма.
$tos = array("usa-1200@mail.ru", "swd200@yandex.ru","swd200@qip.ru");
// Считываем шаблон.
$tpl = file_get_contents("mail.eml");
// Отправляем письма в цикле по получателям.
foreach ($tos as $to) {
// Заменяем элементы шаблона.
$mail = $tpl;
$mail = strtr($mail, array(
"{TO}" => $to,
"{TEXT}" => $text,
));
// Вызываем mailx(), включенную из файла.
mailx($mail);

}

?>

Файл mailenc.php


<?php ## Кодирование заголовков письма.
// Корректно кодирует все заголовки в письме $mail с использованием
// метода base64. Кодировка письма определяется автоматически на основе
// заголовка Content-type. Возвращает полученное письмо.
function mailenc($mail) {
// Разделяем тело сообщения и заголовки.
list ($head, $body) = preg_split("/\r?\n\r?\n/s", $mail, 2);
// Определяем кодировку письма по заголовку Content-type.
$encoding = '';
$re = '/^Content-type:\s*\S+\s*;\s*charset\s*=\s*(\S+)/mi';
if (preg_match($re, $head, $p)) $encoding = $p[1];
// Проходимся по всем строкам-заголовкам.
$newhead = "";
foreach (preg_split('/\r?\n/s', $head) as $line) {
// Кодируем очередной заголовок.
$line = mailenc_header($line, $encoding);
$newhead .= "$line\r\n";
}
// Формируем окончательный результат.
return "$newhead\r\n$body";
}

// Кодирует в строке максимально возможную последовательность
// символов, начинающуюся с недопустимого символа и НЕ
// включающую E-mail (адреса E-mail обрамляют символами < и >).
// Если в строке нет ни одного недопустимого символа, преобразование
// не производится.
function mailenc_header($header, $encoding) {
// Кодировка не задана - делать нечего.
if (!$encoding) return $header;
// Сохраняем кодировку в глобальной переменной. Без использования
// ООП это - единственный способ передать дополнительный параметр
// callback-функции.
$GLOBALS['mail_enc_header_encoding'] = $encoding;
return preg_replace_callback(
'/([\x7F-\xFF][^<>\r\n]*)/s',
'mailenc_header_callback',
$header
);
}

// Служебная функция для использования в preg_replace_callback().
function mailenc_header_callback($p) {
$encoding = $GLOBALS['mail_enc_header_encoding'];
// Пробелы в конце оставляем незакодированными.
preg_match('/^(.*?)(\s*)$/s', $p[1], $sp);
return "=?$encoding?B?".base64_encode($sp[1])."?=".$sp[2];
}
?>

Файл mailx.php


<?php ## Более удобная отправка почты.
// Функция отправляет письмо, полностью заданное в параметре $mail.
// Корректно обрабатываются заголовки To и Subject.
function mailx($mail) {
// Разделяем тело сообщения и заголовки.
list ($head, $body) = preg_split("/\r?\n\r?\n/s", $mail, 2);
// Выделяем заголовок To.
$to = "";
if (preg_match('/^To:\s*([^\r\n]*)[\r\n]*/m', $head, $p)) {
$to = @$p[1]; // сохраняем
$head = str_replace($p[0], "", $head); // удаляем из исходной строки
}
// Выделяем Subject.
$subject = "";
if (preg_match('/^Subject:\s*([^\r\n]*)[\r\n]*/m', $head, $p)) {
$subject = @$p[1];
$head = str_replace($p[0], "", $head);
}
// Отправляем почту. Внимание! Опасный прием!
mail($to, $subject, $body, trim($head));
}
?>

Файл mail.eml


Привет, {TO}!
{TEXT}
Это сообщение сгенерировано роботом - не отвечайте на него.

Запускаю код на локальном компьютере, приходит письмо всем трем получателям:

$tos = array("usa-1200@mail.ru", "swd200@yandex.ru","swd200@qip.ru");

Забросил на сервер http://santa.hut4.ru/ приходит ТОЛЬКО 1 письмо НА usa-1200@mail.ru.

Почему так?

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Рассылка спама незаконна, по крайней мере в России. Для рассылки писем с сайта используют пакетную отправку, например 10 писем каждые 20 секунд. Иначе (даже платный) хостер заблокирует аккаунт. Особенно рассылку с локальных машин

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy