Офис НП 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 36947  Прочтений 36947 Прочтений  226 Комментариев 226 Комментариев
Обновлено: 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. Это, конечно, далеко не все его возможности, и если будет время, как–нибудь мы еще поговорим о нем. Удачи всем и всего самого доброго.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Комментарии
#221 | busGuSast 15 февраля 2020 05:02:02
No Avatar
Гость
cheap legal viagra cialis sale london buy viagra philippines
mail order viagra legitimate <a href=" http://www.p2pjd.com/gppz/space-uid-1803275.html/# ">best place to order generic viagra</a> best place to buy viagra
order cialis in canada <a href=" http://bbs.197my.com/home.php?mod=space&uid=10557/# ">site es cheap viagra</a> buy cialis one a day
http://dgxf-forum.com/home.php?mod=space&uid=545871
https://ibbs.uu.cc/home.php?mod=space&uid=1594216
http://www.115154.com/home.php?mod=space&uid=157333
http://www.zhihon.com/space-uid-87116.html
http://www.p2pjd.com/gppz/space-uid-1803275.html
#222 | WillieDiawl 15 февраля 2020 05:56:24
No Avatar
Гость
personal characteristics essay medical school sample cattririmi.ml working on my essay.
teen chat 13 teen chat advice camwithher femme nude.
dragon astrid nude lesbian almocheemuchdo.ml lesbian milf porn ebony.
amateur first.big fuck for little pussy breasosdianewitch.cf interracial blonde amateur hand tattoo stars. ]
how many pages does an essay have pregiztufi.tk formal essay format mla.
lessons free teen chat rooms chat new ukrainian ladies shiny pantyhose webcam sex.
amateur virtual reality porn amateur sex play tumblr ultra hot asian milf shaved uncensored hardcore amateur.
college girl masturbating in front of friend hairy spread college cheerleaders sex offenders at columbia basin college.
#223 | WillieDiawl 15 февраля 2020 08:59:23
No Avatar
Гость
reflection of english 100 essay good poems to do for an analys essay informational essay rubric caasp.
natural huge tits college enccomwhistzale.tk college boy men guys hairy.
YOU KNOW YOU'RE DATING A COLOMBIAN WOMAN tercconnisilno.tk black women dating white men gifs.
amateur surprised by cock size usmacepipen.cf amateur teen girlfriend public sex videos. ]
how to put emotion into college essay what is the jfk essay about how to create a researched video essay.
nude camel toe pics camilla castro shemale white girl cam.
mature men and women fucking them self thick black ass mature and young boy mature riding big black cock.
nude big tits bbw mature wife thick mature woman big pussy mature older woman sex gif.
#224 | WillieDiawl 15 февраля 2020 12:07:46
No Avatar
Гость
movies to write compare and contrast essays truththenmarer.tk how to do a quick brainstorm for an in class essay.
chat webcam sex free adult video cam chat sex web cam amateur.
young men dating older women social site papers on online dating intro messages for dating profiles men.
bubble butt asian porn king and rose porn opdoltiju.tk hot beautul big boobs japanese mom video hd. ]
dr jekyll and mr hyde split personality essay ascealmazana.gq college essay about starting a business.
vintage camper club vanhalffinap.tk chat russian bride.
underground dating site sonora ca; techtianesenle.ml reddit dating a curvy girl.
big fat ass black teens procjamtoti.cf homemade teen boys experiment sex.
#225 | WillieDiawl 15 февраля 2020 15:15:58
No Avatar
Гость
how to write an english reflective essay evathcacom.tk outline of a personal essay experiential.
free shemale web cam cams teens in bikini search engine youtube teen chatrooms.
quixk holes dating site popinibi.tk good christian dating sites.
short haored redhead teen lesbian home made sex fighting teensrough lesbian missionary porn lesbian daughter hides under moms bed. ]
how many kinds of essays are there how to write argimentative essay mla if i mention a speech in my essay mla.
asian gf fucks in the car asian lady mens room porn japanese girl smothered in lotion nude.
free transsexual dating site best books on dating better for women what was the first online dating site.
mom daughter lesbian caught lesbian lactation hucow cartoon hentai porn chubby lesbian teens try strapon.
#226 | busGuSast 15 февраля 2020 20:07:14
No Avatar
Гость
buy levitra 10mg where to buy viagra generic buy viagra egypt
viagra for sale uk <a href=" http://jzyt.net/space-uid-124828.html/# ">pink cialis pills</a> levitra 20 mg cheap
viagra prescription online <a href=" http://xingsewo.com/space-uid-236377.html/# ">where to buy cialis no prescription</a> buy cialis uk no prescription
https://www.shumo.com/forum/home.php?mod=space&uid=582264
http://www.pushenbbs.com/home.php?mod=space&uid=90962
https://ibbs.uu.cc/home.php?mod=space&uid=1594847
https://www.aixx86.pw/home.php?mod=space&uid=217500
http://www.seafishzone.com/home.php?mod=space&uid=456818
Добавить комментарий
Имя:

Проверочный код:
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
14512 33 promask
27. апреля 2019
folder Вопрос по переделке bb-кода
PHP, MySQL
3693 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
15754 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
8253 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
8145 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
56425 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
4412 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
8708 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
10264 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
3414 0 Pisatel
15. июня 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
6738 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
8528 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
45175 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
4031 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
14633 13 Pisatel
03. апреля 2015