<?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} Это сообщение сгенерировано роботом - не отвечайте на него.
Запускаю код на локальном компьютере, приходит письмо всем трем получателям:
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.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
kilogram
Читаю Котова, там приводится такой код.
Файл index.php
Файл mailenc.php
Файл mailx.php
Файл mail.eml
Запускаю код на локальном компьютере, приходит письмо всем трем получателям:
Забросил на сервер http://santa.hut4.ru/ приходит ТОЛЬКО 1 письмо НА usa-1200@mail.ru.
Почему так?
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
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.