Офис НП AMWAY в Ярославле
→ На карте Купить AMWAY: офис в ЯрославлеКонсультации, презентации, мастер–классы, знакомство с продукцией, заказ и выдача купленного товара:
●Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
●Телефон: +7 (920) 112-00-91
●Email: matyxho@mail.ru
●Сайт: https://www.amway.ru/user/lebedem
●Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » PHPMailer: установка, подключение, настройка скрипта
Сниппет
Весьма качественный и полезный скрипт для рассылки (отправки) email сообщений с вашего сайта. Приведу пару примеров его настройки: отправка письма с вложением и массовая рассылка с вложением.
PHPMailer: установка, подключение, настройка скрипта
В статье расскажу об установке и настройке скрипта для отправки email сообщений PHPMailer, скачать который можно здесь: https://github.co.../PHPMailer. Нам потребуются файлы и директории:
Пример использования функции. Назовем наш файл с функцией sendemail.php и кинем в нашу папку /mailer/:
Как видим, в принципе, ничего сложного нет. Функция вернет нам результат отправки.
Ну а в следующем примере я чуть усложню задачу: мы будем использовать SMTP и отправим письма сразу нескольким пользователям, но это будут не копии (скрытые копии) CC и BCC, а именно рассылка. То есть, фактически, ниже будет небольшой скрипт спамера))) Имена и email мы будем брать из бд. В заголовках письма и в самом письме будем посылать ссылку для отписки, чтобы меньше было шансов попасть в спам-лист почтовых сервисов. Для этого нужно будет создать страницу, перейдя на которую пользователь сразу автоматически отпишется от рассылки. Например, страница будет называться unsubscribe.php, а в качестве идентификатора пользователя мы будем передавать его уникальный id, под которым он существует в нашей бд. Что ж, начнем:
Далее — пример использования функции. Поместим ее в нашу папку /mailer/ в файл с именем sendemail_to_all.php. Априори подразумевается, что бд с пользователями (id, name, email) у вас уже существует и все подключения к ней выполнены. Поехали:
Конечно, вышеприведенный скрипт не претендует на самое элегантное решение, однако он вполне работоспособен и неплохо справляется со своей непосредственной задачей — отправкой email сообщений группе пользователей.
Страницу для отписки, думаю, состряпаете сами, если возникнут вопросы или трудности — пишем в комментариях.
На этом заканчиваю. Основной целью данной статьи была необходимость показать, как работает скрипт PHPMailer. Это, конечно, далеко не все его возможности, и если будет время, как–нибудь мы еще поговорим о нем. Удачи всем и всего самого доброго.
- /language/
- PhpMailerAutoload.php
- class.phpmailer.php
- class.smtp.php
- class.pop3.php
Код: PHP
function sendemail($fromemail, $fromname, $toemail, $toname, $subject, $message) {
date_default_timezone_set("Europe/Moscow"); // устанавливаем часовую зону
require "PHPMailerAutoload.php"; // подключаем файл автозагрузки
$mail = new PHPMailer(); // инициализируем класс
file_exists("/language/phpmailer.lang-ru.php") ? $mail->SetLanguage("ru", "/language/") : $mail->SetLanguage("en", /language/"); // подключили языковой пакет для вывода ошибок и отчетов
$mail->isMAIL(); // указали, что не смтп
$mail->CharSet = "UTF-8"; // кодировка заголовков
$mail->setFrom($fromemail, $fromname); // от кого
$mail->addReplyTo($fromemail, $fromname); // адрес и имя для ответа
$mail->Subject = $subject; // заголовок письма (тема сообщения)
$plain = $mail->html2text($message); // создаем текстовую версию для устройств, не поддерживающих html
$mail->isHTML(true); // указали, что сообщение в стандарте html
$img_path = "/images/mylogo.png"; // адрес логотипа
$img_cid = md5($img_path); // сид логотипа
$img_name = "mylogo"; // имя логотипа
$mail->addEmbeddedImage($img_path, $img_cid, $img_name); // добавили в тело письма логотип
$body = "<!DOCTYPE html>"; // создаем тело письма
$body .= "<html><head>"; // структуру я минимизирую, шаблонов в сети много, либо создайте свой
$body .= "<meta charset='UTF-8' />";
$body .= "<title>".$subject."</title>";
$body .= "</head><body>";
$body .= "<table><tr><td>";
$body .= "<table style='width:600px'><tr><td>";
$body .= "<a href='http://www.meweb.ru/' title='MeWEB' target='_blank'><img src='cid:".$img_cid."' alt='MeWEB' /></a></td>"; // указали место, где будет отображен логотип
$body .= "<td>";
$body .= "<a href='http://www.meweb.ru/' title='MeWEB' target='_blank'>MeWEB</a><br /><br /><a href='mailto:".$fromemail."'>".$fromemail."</a></td></tr>";
$body .= "<tr><td colspan='2'> </td></tr>";
$body .= "<tr><td colspan='2'><h3 syle='text-align:center'>".$subject."</h3>".nl2br($message)."</td></tr>"; // вывели в тело тему письма и само письмо
$body .= "<tr><td colspan='2'><em>All rights reserved | Copyright © <a href='http://www.meweb.ru/' title='MeWEB' target='_blank'>MeWEB</a> ".date("Y")."</em></td></tr>";
$body .= "</table></td></tr></table>";
$body .= "</body></html>";
$mail->msgHTML($body); // формируем тело
$mail->AltBody = $plain; // альтернативное тело письма
$mail->addAddress($toemail, $toname); // добавляем получателя и отправляем
if (!$mail->send()) { // если произошла ошибка при отправке
$return = $toname." | ".str_replace("@", "@", $toemail)." ".$mail->ErrorInfo." | ".date("d-m-Y в H:i:s"); // возвращаем сообщение об ошибке
} else {
$return = $toname." | ".str_replace("@", "@", $toemail)." | ".date("d-m-Y в H:i:s");
} // если сообщение отправлено удачно- возвращаем время отправки
$mail->clearAddresses();
$mail->clearCustomHeaders();
$mail->clearAttachments();
$mail->clearReplyTos(); // чистим все заголовки
return $return;
}
Пример использования функции. Назовем наш файл с функцией sendemail.php и кинем в нашу папку /mailer/:
Код: PHP
require_once "mailer/sendemail.php";
$sending = sendemail("от_кого@домен.ру", "Ваше_имя", "кому@домен.ру", "Имя_кому", "Тема_письма", "Сообщение");
echo "<div>".$sending."</div>";
Как видим, в принципе, ничего сложного нет. Функция вернет нам результат отправки.
Ну а в следующем примере я чуть усложню задачу: мы будем использовать SMTP и отправим письма сразу нескольким пользователям, но это будут не копии (скрытые копии) CC и BCC, а именно рассылка. То есть, фактически, ниже будет небольшой скрипт спамера))) Имена и email мы будем брать из бд. В заголовках письма и в самом письме будем посылать ссылку для отписки, чтобы меньше было шансов попасть в спам-лист почтовых сервисов. Для этого нужно будет создать страницу, перейдя на которую пользователь сразу автоматически отпишется от рассылки. Например, страница будет называться unsubscribe.php, а в качестве идентификатора пользователя мы будем передавать его уникальный id, под которым он существует в нашей бд. Что ж, начнем:
Код: PHP
function sendemail_to_all($fromemail, $fromname, $subject, $message, $data) {
date_default_timezone_set("Europe/Moscow"); // временная зона
require "PHPMailerAutoload.php"; // подключили скрипт
$mail = new PHPMailer(); // инициализация класса
file_exists("/language/phpmailer.lang-ru.php") ? $mail->SetLanguage("ru", "/language/") : $mail->SetLanguage("en", "/language/"); // языковой пакет
$mail->isSMTP(); // указали, что работаем по протоколу смтп
$mail->Host = "smtp.yordomain.ru"; // хост
$mail->Port = "25"; // порт
$mail->SMTPAuth = true; // аутентификация включена
$mail->Username = "name@yourdomain.ru"; // реальный ящик, желательно совпадающий с вашим доменным именем
$mail->Password = "123456789"; // пароль от ящика
$mail->CharSet = "UTF-8"; // кодировка
$mail->setFrom($fromemail, $fromname); // от кого
$mail->addReplyTo($fromemail, $fromname); // кому ответить
$mail->Subject = $subject; // тема письма (заголовок)
$plain = $mail->html2text($message); // тело альтернативного письма
$mail->isHTML(true);
$img_path = "/images/mylogo.png"; // адрес логотипа
$img_cid = md5($img_path); // сид логотипа
$img_name = "mylogo"; // имя логотипа
$mail->addEmbeddedImage($img_path, $img_cid, $img_name); // добавили в тело письма логотип
$body = "<!DOCTYPE html>"; // создаем тело письма
$body .= "<html><head>"; // структуру я минимизирую, шаблонов в сети много, либо создайте свой
$body .= "<meta charset='UTF-8' />";
$body .= "<title>".$subject."</title>";
$body .= "</head><body>";
$body .= "<table><tr><td>";
$body .= "<table style='width:600px'><tr><td>";
$body .= "<a href='http://www.meweb.ru/' title='MeWEB' target='_blank'><img src='cid:".$img_cid."' alt='MeWEB' /></a></td>"; // указали место, где будет отображен логотип
$body .= "<td>";
$body .= "<a href='http://www.meweb.ru/' title='MeWEB' target='_blank'>MeWEB</a><br /><br /><a href='mailto:".$fromemail."'>".$fromemail."</a></td></tr>";
$body .= "<tr><td colspan='2'> </td></tr>";
$body .= "<tr><td colspan='2'><h3 syle='text-align:center'>Здравствуйте, {USER_NAME} !</h3>".nl2br($message)."<br /><br />Чтобы отписаться от рассылки, перейдите по ссылке <a href='http://www.meweb.ru/mailer/unsubscribe.php?delete={USER_ID}' target='_blank'>Отписаться</a></td></tr>"; // вывели в тело имя пользователя и само сообщение с ссылкой для отписки
$body .= "<tr><td colspan='2'><em>All rights reserved | Copyright © <a href='http://www.meweb.ru/' title='MeWEB' target='_blank'>MeWEB</a> ".date("Y")."</em></td></tr>";
$body .= "</table></td></tr></table>";
$body .= "</body></html>";
$mail->msgHTML($body); // формируем тело
$mail->AltBody = $plain; // альтернативное тело письма
$i = 0;
foreach ($data as $row) { // проход по массиву из бд
unset($user); // вначале каждый раз очищаем переменную
$user = $row['user_id']; // уникальный id пользователя
$mail->addCustomHeader("Precedence", "bulk"); // добавили заголовок, чтобы дать понять почтовым сервисам, что это рассылка
$mail->AddCustomHeader("List-Unsubscribe", "<http://www.meweb.ru/mailer/unsubscribe.php?delete=".$user.">"); // добавили заголовок с ссылкой для отписки от рассылки
$mail->addAddress($row['user_email'], $row['user_name']); // добавили адрес и имя получателя
$mail->Body = str_replace(array("{USER_NAME}", "{USER_ID}"), array($row['user_name'], $user), $body); // вставляем в сообщение имя пользователя и уникальный id для ссылки
$mail->AltBody = str_replace(array("{USER_NAME}", "{USER_ID}"), array($row['user_name'], $user), $plain); // аналогично для альтернативного сообщения
if (!$mail->send()) { // если письмо не отправлено
$return[] = "ierror | ".$row['user_name']." | ".str_replace("@", "@", $row['user_email'])." ".$mail->ErrorInfo." | ".date("d-m-Y в H:i:s"); // возвращаем массив с ошибкой
break; // останавливаем перебор массива
} else { // если отправка прошла удачно
$return[] = "isuccess | ".$row['user_name']." | ".str_replace("@", "@", $row['user_email'])." | ".date("d-m-Y в H:i:s"); // возвращаем массив с отчетом
($i % 2 == 0) ? sleep(0.2) : sleep(0.4); // делаем паузу при рассылке между сообщениями
}
$mail->clearAddresses(); // в цикле чистим адрес, чтобы при новом проходе добавить другой
$mail->clearCustomHeaders(); // чистим в цикле заголовки, чтобы при новом проходе добавить новые
$i++;
}
$mail->clearAttachments();
$mail->clearReplyTos(); // очищаем
return $return; // функция возвращает нам результат в массиве
}
Далее — пример использования функции. Поместим ее в нашу папку /mailer/ в файл с именем sendemail_to_all.php. Априори подразумевается, что бд с пользователями (id, name, email) у вас уже существует и все подключения к ней выполнены. Поехали:
Код: PHP
require "mailer/sendemail_to_all.php"; // подключили нашу функцию
$result = mysqli_query($db, "SELECT user_id, user_name, user_email FROM myusers"); // сделали выборку из базы
if (mysqli_num_rows($result)) { // если результат больше 0
while($arrs = mysqli_fetch_assoc($result)) { // запускаем цикл
$data[] = $arrs; // и формируем массив с данными пользователей
}
$sending = sendemail_to_all("mymail@mydomain.ru", "MyName", $subject, $message, $data); // отправляем письмо всем и записываем результат в переменную в виде массива, который отдаст функция
} else { иначе, если пользователей 0
$sending = "<div style='text-align:center'>База пуста!</div>"; // задаем переменную с сообщением
}
$onw = "";
$c = 0;
if (is_array($sending)) { // если переменная является массивом
foreach($sending as $wmess) { // проходим циклом
$m = explode(" | ", $wmess); // разбиваем строку по разделителю, превращая в массив, чтобы удобнее обращаться к элементам
$onw .= "<div>".((strpos($m[0], "isuccess") !== false) ? "<span style='color:green'>Отправлено: </span>" : "<span style='color:red'>Ошибка: </span>")." Имя: ".$m[1]." Email: ".$m[2]." Время: ".$m[3]."</div>";
$c++;
}
$all = $c; // счетчик
} else {
$onw .= $sending;
$all = 0;
}
echo $onw; // выводим результат
echo "Всего отправлено: ".$all;
Конечно, вышеприведенный скрипт не претендует на самое элегантное решение, однако он вполне работоспособен и неплохо справляется со своей непосредственной задачей — отправкой email сообщений группе пользователей.
Страницу для отписки, думаю, состряпаете сами, если возникнут вопросы или трудности — пишем в комментариях.
На этом заканчиваю. Основной целью данной статьи была необходимость показать, как работает скрипт PHPMailer. Это, конечно, далеко не все его возможности, и если будет время, как–нибудь мы еще поговорим о нем. Удачи всем и всего самого доброго.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения | |
Вопрос по переделке bb-кода PHP, MySQL |
22842 | 5 | Pisatel 26. мая 2017 |
|
Вопросы по Ajax форме обратной связи CMS PHP Fusion |
71905 | 48 | Ditrin 19. февраля 2017 |
|
BBCode YouTube Video Colorbox mod CMS PHP Fusion |
15720 | 2 | Pisatel 10. декабря 2016 |
|
Как лучше создать собственную страницу? CMS PHP Fusion |
18395 | 17 | Pisatel 11. мая 2016 |
|
Небольшие вопросы по скриптам магазина и катало... PHP, MySQL |
150159 | 80 | Pisatel 11. января 2016 |
|
BBCode Code mod CMS PHP Fusion |
14889 | 0 | Pisatel 31. августа 2015 |
|
Ajax Like Dislike Article Panel CMS PHP Fusion |
23190 | 16 | Pisatel 07. июля 2015 |
|
Хлебные крошки / BreadCrumbs SEO Panel CMS PHP Fusion |
26991 | 17 | Pisatel 04. июля 2015 |
|
Abbr Description BBCode CMS PHP Fusion |
7831 | 0 | Pisatel 15. июня 2015 |
|
Плагин Email рассылки Mail To All by Pisatel CMS PHP Fusion |
38109 | 32 | Pisatel 26. апреля 2015 |
|
Подозрительный трафик и прочие страшилки Всякая хрень |
12021 | 2 | Ditrin 23. апреля 2015 |
|
Мод Newsletter - рассылка писем пользователям с... CMS PHP Fusion |
31456 | 13 | Pisatel 10. апреля 2015 |
|
Мод отправки писем PHPMailer для PHP-Fusion CMS PHP Fusion |
133359 | 113 | Ditrin 06. апреля 2015 |
|
Появление неизвестного файла subscriptions.php CMS PHP Fusion |
8996 | 2 | Pisatel 06. апреля 2015 |
|
Autoban on IP CMS PHP Fusion |
23508 | 13 | Pisatel 03. апреля 2015 |