Офис НП 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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
1 2 3 | require_once "mailer/sendemail.php" ; $sending = sendemail( "от_кого@домен.ру" , "Ваше_имя" , "кому@домен.ру" , "Имя_кому" , "Тема_письма" , "Сообщение" ); echo "<div>" . $sending . "</div>" ; |
Как видим, в принципе, ничего сложного нет. Функция вернет нам результат отправки.
Ну а в следующем примере я чуть усложню задачу: мы будем использовать SMTP и отправим письма сразу нескольким пользователям, но это будут не копии (скрытые копии) CC и BCC, а именно рассылка. То есть, фактически, ниже будет небольшой скрипт спамера))) Имена и email мы будем брать из бд. В заголовках письма и в самом письме будем посылать ссылку для отписки, чтобы меньше было шансов попасть в спам-лист почтовых сервисов. Для этого нужно будет создать страницу, перейдя на которую пользователь сразу автоматически отпишется от рассылки. Например, страница будет называться unsubscribe.php, а в качестве идентификатора пользователя мы будем передавать его уникальный id, под которым он существует в нашей бд. Что ж, начнем:
Код: PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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. Это, конечно, далеко не все его возможности, и если будет время, как–нибудь мы еще поговорим о нем. Удачи всем и всего самого доброго.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения |