Офис НП 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: установка, подключение, настройка скрипта
Опубликовал  Pisatel Добавлено  27-04-2015 15:31 27 Апрель 2015 15:31:14 63138  Прочтений 63138 Прочтений  785 Комментариев 785 Комментариев
Обновлено: 27-04-2015 15:53 Обновлено: 27 апреля 2015 15:53:29  printer
В статье расскажу об установке и настройке скрипта для отправки email сообщений PHPMailer, скачать который можно здесь: https://github.co.../PHPMailer. Нам потребуются файлы и директории:
  • /language/
  • PhpMailerAutoload.php
  • class.phpmailer.php
  • class.smtp.php
  • class.pop3.php
Итак, создадим папку, например, /mailer/, и все файлы скрипта загрузим в нее. Ну а далее я приведу пару примеров функции для отправки письма (писем). Не буду останавливаться на письмах в стандарте text, все наши письма будут в стандарте html. Итак, начнем с самого простого: функция для отправки письма с изображением (логотип сайта), но без аутентификации smtp:

Код: 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'>&nbsp;</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 &copy; <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("@", "&#64;", $toemail)." ".$mail->ErrorInfo." | ".date("d-m-Y в H:i:s"); // возвращаем сообщение об ошибке

} else {

$return = $toname." | ".str_replace("@", "&#64;", $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'>&nbsp;</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 &copy; <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("@", "&#64", $row['user_email'])." ".$mail->ErrorInfo." | ".date("d-m-Y в H:i:s"); // возвращаем массив с ошибкой

break; // останавливаем перебор массива

} else { // если отправка прошла удачно

$return[] = "isuccess | ".$row['user_name']." | ".str_replace("@", "&#64", $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. Это, конечно, далеко не все его возможности, и если будет время, как–нибудь мы еще поговорим о нем. Удачи всем и всего самого доброго.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Комментарии
#721 | DavidRes 30 июня 2020 00:54:43
No Avatar
Гость
best nj online casino onlinecasino001.com win real money online casino.
new online payday loans paydayloans1 payday loans michigan.
#722 | DavidRes 30 июня 2020 01:25:39
No Avatar
Гость
discover personal loans customer service 500 credit score personal loans bbb accredited personal loans for bad credit.
online casino no deposit bonus no download instant play onlinecasinorealmoney.site no deposit online casino.
#723 | DavidRes 30 июня 2020 01:56:45
No Avatar
Гость
no deposit online casino usa online casino no deposit bonus best online casino south africa.
usa online casino no deposit bonus codes play casino games online for real money online casino games free bonus no deposit.
#724 | DavidRes 30 июня 2020 02:28:42
No Avatar
Гость
bad credit payday loans online badcreditloans01.com home loans for disabled veterans with bad credit.
mortgage loans for bad credit student loans bad credit pet loans for bad credit.
#725 | DavidRes 30 июня 2020 03:02:40
No Avatar
Гость
payday loans without checking account paydayloans01.com easy payday loans online.
installment loans for self employed with bad credit direct lenders for bad credit loans do credit unions give loans to bad credit.
#726 | DavidRes 30 июня 2020 03:33:13
No Avatar
Гость
legit online payday loans payday loans florida payday loans no credit checks.
free online casino canada onlinecasinonodeposit best online casino payout.
#727 | DavidRes 30 июня 2020 04:01:50
No Avatar
Гость
payday loans springfield mo best payday loans cheap payday loans.
student loans without cosigner bad credit badcreditloans02.com bad credit installment loans direct lender.
#728 | DavidRes 30 июня 2020 04:32:37
No Avatar
Гость
payday loans poor credit bad credit personal loans not payday loans payday loans reno.
loans for students with bad credit private student loans bad credit loans for bad credit in pa.
#729 | DavidRes 30 июня 2020 05:02:12
No Avatar
Гость
personal loans without credit check personal loans calculator small personal loans bad credit.
earnest personal loans capital one personal loans military personal loans.
#730 | DavidRes 30 июня 2020 05:35:35
No Avatar
Гость
online casino no deposit required onlinecasino001.com hollywood casino play online.
personal business loans online loans for bad credit quicken loans personal loans.
#731 | DavidRes 30 июня 2020 06:05:34
No Avatar
Гость
online casino canada real money onlinecasino001.com las vegas casino online no deposit bonus codes.
are there any guaranteed loans for bad credit personal loans for people with bad credit direct lender bad credit loans.
#732 | DavidRes 30 июня 2020 06:37:03
No Avatar
Гость
legit loans for bad credit secured loans for bad credit best online payday loans for bad credit.
personal line of credit loans personal micro loans no income verification personal loans.
#733 | DavidRes 30 июня 2020 07:09:38
No Avatar
Гость
does wells fargo give personal loans with bad credit easy approval installment loans for bad credit direct lenders are there any guaranteed loans for bad credit.
home equity loans for bad credit dental loans bad credit indian loans bad credit.
#734 | DavidRes 30 июня 2020 07:41:14
No Avatar
Гость
free online casino no deposit required best online casino no deposit bonuses free online casino slots with bonuses.
direct online payday loans paydayloans1 no teletrack payday loans direct lenders 100 approval.
#735 | DavidRes 30 июня 2020 08:11:27
No Avatar
Гость
personal loans for bad credit in michigan student loans bad credit no cosigner bad credit consolidation loans.
new online casino no deposit bonus codes online casino no deposit required las vegas casino online no deposit bonus codes.
#736 | DavidRes 30 июня 2020 08:41:09
No Avatar
Гость
does wells fargo give personal loans with bad credit personal loans for fair credit does bank of america do personal loans.
free cash online casino no deposit casino games play online play online casino no deposit bonus.
#737 | DavidRes 30 июня 2020 09:13:17
No Avatar
Гость
online casino nz no deposit best casino online online casino uk no deposit.
online casino no deposit bonus mobile online casino no deposit bonus free spins best online casino websites.
#738 | DavidRes 30 июня 2020 09:42:24
No Avatar
Гость
free online casino slot machines online mobile casino no deposit bonus real online casino.
best online casino promotions onlinecasinorealmoney slots online free casino.
#739 | DavidRes 30 июня 2020 10:13:30
No Avatar
Гость
personal loans houston guaranteed personal loans does bank of america do personal loans.
play for real money online casino online casino with free signup bonus real money usa free no deposit bonus online mobile casino.
#740 | DavidRes 30 июня 2020 11:17:05
No Avatar
Гость
real vegas online casino no deposit bonus codes 2016 onlinecasino001.com online casino 120 free spins.
new online casino no deposit bonus codes onlinecasino002 jackpot party casino game online for free.
Добавить комментарий
Имя:

Проверочный код:
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
16683 33 promask
27. апреля 2019
folder Вопрос по переделке bb-кода
PHP, MySQL
4196 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
17834 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
8665 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
8871 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
59834 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
5749 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
9423 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
11170 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
3793 0 Pisatel
15. июня 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
7245 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
9186 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
48734 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
4381 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
15314 13 Pisatel
03. апреля 2015