php mailer v2 smtp other setup port ssl
Php mailer v2 smtp other setup port ssl
PHPMailer – A full-featured email creation and transfer class for PHP
Why you might need it
Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you’ll find online that uses the mail() function directly is just plain wrong, if not unsafe!
The PHP mail() function usually sends via a local mail server, typically fronted by a sendmail binary on Linux, BSD, and macOS platforms, however, Windows usually doesn’t include a local mail server; PHPMailer’s integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the mail() function should be avoided when possible; it’s both faster and safer to use SMTP to localhost.
This software is distributed under the LGPL 2.1 license, along with the GPL Cooperation Commitment. Please read LICENSE for information on the software availability and distribution.
PHPMailer is available on Packagist (using semantic versioning), and installation via Composer is the recommended way to install PHPMailer. Just add this line to your composer.json file:
Note that the vendor folder and the vendor/autoload.php script are generated by Composer; they are not part of PHPMailer.
Alternatively, if you’re not using Composer, you can download PHPMailer as a zip file, (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the include_path directories specified in your PHP configuration and load each class file manually:
If you’re not using the SMTP class explicitly (you’re probably not), you don’t need a use line for the SMTP class. Even if you’re not using exceptions, you do still need to load the Exception class as it is used internally.
PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the 5.2-stable branch. If you’re using PHP 5.5 or later (which you should be), switch to the 6.x releases.
While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need src/PHPMailer.php. If you’re using SMTP, you’ll need src/SMTP.php, and if you’re using POP-before SMTP (very unlikely!), you’ll need src/POP3.php. You can skip the language folder if you’re not showing errors to users and can make do with English-only errors. If you’re using XOAUTH2 you will need src/OAuth.php as well as the Composer dependencies for the services you wish to authenticate with. Really, it’s much easier to use Composer!
You’ll find plenty to play with in the examples folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more.
If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See the mailing list example for further guidance.
That’s it. You should now be ready to use PHPMailer!
PHPMailer defaults to English, but in the language folder you’ll find many translations for PHPMailer error messages that you may encounter. Their filenames contain ISO 639-1 language code for the translations, for example fr for French. To specify a language, you need to tell PHPMailer which one to use, like this:
We welcome corrections and new languages – if you’re looking for corrections, run the PHPMailerLangTest.php script in the tests folder and it will show any missing translations.
Start reading at the GitHub wiki. If you’re having trouble, head for the troubleshooting guide as it’s frequently updated.
Examples of how to use PHPMailer for common scenarios can be found in the examples folder. If you’re looking for a good starting point, we recommend you start with the Gmail example.
To reduce PHPMailer’s deployed code footprint, examples are not included if you load PHPMailer via Composer or via GitHub’s zip file download, so you’ll need to either clone the git repository or use the above links to get to the examples directly.
Complete generated API documentation is available online.
You can generate complete API-level documentation by running phpdoc in the top-level folder, and documentation will appear in the docs folder, though you’ll need to have PHPDocumentor installed. You may find the unit tests a good reference for how to do various operations such as encryption.
If the documentation doesn’t cover what you need, search the many questions on Stack Overflow, and before you ask a question about «SMTP Error: Could not connect to SMTP host.», read the troubleshooting guide.
PHPMailer tests use PHPUnit 9, with a polyfill to let 9-style tests run on older PHPUnit and PHP versions.
If this isn’t passing, is there something you can do to help?
Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately.
Please submit bug reports, suggestions and pull requests to the GitHub issue tracker.
We’re particularly interested in fixing edge-cases, expanding test coverage and updating translations.
If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it.
If you have git clones from prior to the move to the PHPMailer GitHub organisation, you’ll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone:
Please don’t use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.
Development time and resources for PHPMailer are provided by Smartmessages.net, the world’s only privacy-first email marketing system.
PHPMailer For Enterprise
Available as part of the Tidelift Subscription.
The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. Learn more.
What’s changed since moving from SourceForge?
Грамотная настройка сервера отправки почты для скриптов PHP, настройка функции mail()
В этом топике вы узнаете, как грамотно настроить, сервер исходящей почты и в частности функцию mail() в PHP. Сам являюсь жутким педантом. Люблю, что бы везде было все на своих местах, не терплю халтуры. Увидев один раз полную чушь в заголовках письма со своего сервера я разобрался с этим кардинально и безоговорочно. Под грамотной настройкой я подразумеваю такую, которая удовлетворяет потребности спам фильтров крупных почтовых систем, и просто выглядело красиво и осмысленно.
Как известно протокол SMTP не подразумевает никаких средств защиты от спама и аутентификации пользователя, поэтому крупными и не очень компаниями были придуманы «фиксы» безопасности протокола.
Если вы устанавливаете выделенный сервер с доменом размещенным на нем, очень рекомендуется выполнить данные настройки, что бы все было как надо.
На изучение этого вопроса я потратил немало времени, разобравшись в каждом заголовке. Начал с базовой настройки из пакетов, при этом из предоставляемых пакетов выбрал, то что понравилось, а закончил тонким феншуем, который я так до конца не воплотил, ибо это уже было совсем изыск.
Название заголовка выбрал именно такое, так как вначале своего пути я искал что-то вроде этого. Настраивать будем postfix, php, dns (ptr, spf), и другое.
Эта статья будет интересная людям, настраивающим выделеные сервера, но не менее интересна для обычных программистов.
К слову данную инструкцию я использую для своих проектов. Системы автоматизированного получения приглашений и получения виз в страны Шенгена: https://goingrus.com/ru, весь софт крутится на виртуальной машине.
Подробности под катом
Преамбула
Кто-то пользуется либами, которые заменяют функцию mail (например phpmailer), они могут общаться с SMTP напрямую, а могут отправлять и на локальный сервер. Но лучше использовать стандартную встроенную и настроенную функцию PHP mail() которая будет отправлять почту на локальный сервер исходящей почты, который в свою очередь будет с ней сам разбираться. При использовании данной функции тормозов всегда наименьшее количество, так как локальный почтовый агент быстро принимает либо отклоняет почту, а если принимает, то доставляет самостоятельно.
Статья отформатирована не самым лучшим образом. Извиняюсь, время поджимает, а рассказать хочется пока вспомнил, а то потом не времени будет.
Чем проверять нашу работу?
Тестируем вот этим методом
Мы будем очень много читать заголовки писем. Просматривать заголовки очень удобно в gmail, там есть такая фишка в 2 клика, сами найдете.
Каких целей в заголовках нам требуется достичь?
— Вот этих заголовков от gmail.com
Прошу заметить, что это заголовки с которыми письмо попадает в ящик конечного пользователя
— А так же этих заголовков от mail.ru
Когда вы только начнете, вы увидите, что таких красивых заголовков у вас нет. Принимающий сервер почты будет считать вас каким-то чучмеком, об этом и будет писать в заголовке письма с предупреждением, что вот еще чуть чуть и он тебя точно в блек-лист поставит. Вся информация в заголовке используются всеми цепочками серверов и принимающий агент для того что бы в зависимости от настроек спам фильтра отклонить письмо или принять. Самые драконовые методы это блек-листы, а мягкие определяют плохих по заголовкам и жалобам.
Приступим
— Совет
Господа, я люблю ставить все пакетами и новичкам не советую заниматься самодеятельностью, во многих пакетах уже есть скрипты автоматической настройки, результаты которых надо только чутка подправить и все будет хорошо. Кроме того, из репозиториев оно само обновляется и вообще меньше запары просто потому что её меньше.
— Настройка PHP
Ставим как хотим php, это вы как-нибудь без меня.
Идем в настройки php, заменяем эквивалентно:
Этим мы указали заголовок Return-Path:
Кстати 1: это будет таковым для всех виртуальных доменов сервера, что бы это исправить и настроить под текущий, то требуется передать 5-й параметр в функцию mail().
Кстати 2: если вы поставите 5-й параметр на обычном виртуальном хостинге, то вам тоже рекомендуется проводить настройку вашего домена, как это описано ниже. Обращаю внимание, что операцию с PTR записями сделать невозможно, так как 1 IP = Домен, ну или по крайней мере не рекомендуется делать их 2, не помню уже.
— Настройка MTA, он же локальный сервер исходящей почты
Я вам искренне советую postfix, далее идем в настройки /etc/postfix/main.cf
для тех, кто уже нарвался на sendmail, и понял как они трудно выпиливаются из системы, советую команду:
Далее, делаем эквивалетно вот так
myhostname = goingrus.com
#smtp_helo_name = srv.goingrus.com
mydestination = _ALL_, goingrus.com, srv.goingrus.com, localhost.goingrus.com, localhost
(srv.goingrus.com — это мой сервер в домене goingrus.com)
— Если я не ошибаюсь, это помогло. Когда агент доставки представляется другому серверу передается HELO. Поменяете myhostname, поменяется следующий заголовок:
Message-Id:
— smtp_helo_name по дефолту это myhostname, читаем матчасть
— mydestination — если я не ошибаюсь, это задает те домены с которых MTA будет принимать почту на обработку, если у вас виртуальный хостинг (что я устроил на сервере дома), то без _ALL_ у вас будут проблемы с отправкой почты с других доменов кроме указанных.
Ну вот, видите, заголовки уже намного правильнее не так ли, а то ужас поначалу был.
— Разборки с почтовыми сервисами (почтовики)
А они нас считают как недобрый источник.
Наш сервер смог правильно helo представиться, но вот только почтовики нам все равно не доверяют.
Для этого были придуман алгоритм, для того что бы владелец домена с помощью DNS (если он конечно грамотный как мы) мог указывать, что вот таким-то серверам можно доверять, а другим нельзя.
У вас вместо ужаса который сейчас должно получиться вот это:
Мы уже на пути к истине. К слову, по умолчанию, почтовик все считает как v=spf1
all, что понижает уровень порога входа в блек лист, и а так же можно пользоваться вашим доменом для отправки спама, и вас сами того не знали пометят как плохиша на будущие времена.
v=spf1
это означает, что версия алгоритма spf1
+mx
Можно доверять почте если она отправлена с серверов mx, например если mx.goingrus.com это сервер приема, то если этот сервер будет отправлять, то все будет хорошо.
+a:goingrus.com
Можно доверять серверу, обслуживающий домен goingrus.com
так же добавлю, например на моем почтовом сервере разместился pupkin.ru.
Я дал Пупкину погонять мой почтовый сервер исходящей почты srv.goingrus.com (обычная ситуация виртуального хостинга, он всегда стоит локально, как бд, и все все все). Тогда он у себя должен настроить +a:srv.goingrus.com
+include:gmail.com
Импортируем все правила gmail.com, у них тоже есть такая запись TXT для своих серверов. (я использую сервисы google для домена)
-all
Указываем, что админ считает другие места не своими, и это может быть ближайший бордель в подворотне рассылающий спам от моего имени
(+all а это означает, что весь мир мои друзья)
— Разборки с почтовыми сервисами, настройка обратной PTR
Почтовики еще спрашивают обратные доменные зоны PTR для дополнительной галочки, думаю эта галочка одна из самых жирных, так как она 100% определяет сервер, и если он ведет себя правильно, то ему очень сильно доверяют и любое письмо наверняка дойдет до адресата.
X-Mru-PTR: goingrus.com, он же есть в google наврное это Received: from goingrus.com (goingrus.com. [188.134.79.140])
Заметка:
В виртуальном хостинге вам это сделать не дадут, у них на этот адрес замапин свой сервер, какой-нибудь servername.badhosting.ru, на котором вы и размещаетесь, да и вообще только на собственном серваке с собственным IP это возможно провернуть.
Интересно: Если вы живете дома, а у меня один из серверов стоит дома, в частности goingrus.com. Что делать? вроде IP выделенный, а обратный адрес, не настроить. Я позвонил выше (к провайдеру) сказал мол так и так хочу PTR зону. Мне её сделали, очень доволен.
Еще немного слов о заголовках (все вперемешку)
X-Mru-BL: 0:0:0:0 упаси вас иметь что-нибудь кроме нолей, это блеклисты.
X-Mru-OF: интерфейс с которого посылается, я так и не понял от чего это зависит.
X-PHP-Originating-Script: — я бы советовал добавлять, хотя если вы очень печетесь о безопасности и неразглашении, то можно и запретить. Делается это неподалеку от той настройки PHP которой мы делали. По умолчанию включено.
Еще можно и интересно посмотреть что пишет Яндекс при приеме, очень интересно.
Дополнительно
Там еще какие-то цифровые подписи есть.
определяется заголовком, DKIM-Signature
С виду у меня уже было все в порядке, а этот заголовок не очень нужен. Он нужен обычно сервисом очень крупного масштаба вроде facebook или google где рассылка уведомлений и почты идет в гигатонном масштабе. Если ваш сервис не обладает миллионами пользователей, то не думайте об этом, хотя если вы изыскатель — напишите как об этом здесь и мы свяжем статьи — что бы все казалось полностью законченным, только я прошу намного проще написать, так как уже где-то видел статьи про это все. От себя добавлю что мне было лень устанавливать еще один пакет, разбираться и еще что-нить.
Материала к сожалению нет, так как по крупицам отовсюду собирал 4 месяца назад, потом меня не было времени, а теперь я написал по памяти.
Удачной грамотной настройки вашего сервера. Я попробовал объяснить хотя бы один из нескольких аспектов настройки.
Исчерпывающая инструкция по PHP Mailer
Введение
Рассылка сообщений посредствам PHP может быть очень простой, а может быть очень сложной, все зависит от того, что и как вы собираетесь посылать.
Стандартное электронное письмо – это обычный текст, что и используется большинством разработчиков, поэтому создание MIME заголовков для HTML писем может стать сложным процессом. Теперь трудности вам не грозят, потомучто у вас есть чудесная библиотека PHPMailer, которая, к тому же, бесплатна.
В этом обучающем курсе мы будем подробно обсуждать особенности и возможности этой библиотеки.
Требования
Требования у данной библиотеки очень скромны. Вам нужен только PHP и возможность отсылать письма посредствам команды mail() или через SMTP соединение.
Также вы должны понимать основы объектно-ориентированного программирования (ООП), или, по крайней мере, понимать как правильно применять данные ниже примеры.
Не переживайте! Этот курс достаточно прост!
О PHPMailer
Это класс, обеспечивающий полную функциональность при отправке почтовых сообщений на PHP. Я назвал бы его самым лучшим из всех, которые я когда-либо использовал. Его популярность очень быстро росла. С момента появления, 7 декабря 2004 года, его скачали уже более 100 000 раз! Я надеюсь, что вы захотите увеличить это число после прочтения данного обучающего курса, и, что еще более важно, вы узнаете, как использовать те возможности по работе с почтой, о которых вы только мечтали.
Что может PHPMailer
На момент написания этого обучающего курса PHP Mailer умел:
Разработчики PHPMailer
Я выражаю этим людям свою признательность, потомучто они столько сделали, чтобы ускорить развитие моих проектов, включая PHPFreaks.com!
Готовим PHPMailer для использования
Скачать и распаковать
Первое, что вы должны сделать, это, конечно же, скачать PHPMailer! Вы можете найти его здесь: https://github.com/PHPMailer/PHPMailer/. После того, как вы скачаете файл, распакуйте его в каталог. В нашем учебнике мы предположим, что ваш сайт находится здесь: /home/mywebsite/public_html/. Теперь необходимо создать несколько директорий, чтобы упорядочить структуру проекта. Я обычно помещаю библиотеки в каталог ‘lib‘, а затем их название. Таким образом, извлекаем PHPMailer сюда: /home/mywebsite/public_html/lib/phpmailer. Вот пример из командной строки:
Теперь, когда все файлы на своих местах, давайте создадим файл конфигурации нашего проекта.
Создание и использование файла конфигурации
Одна из главных вещей, которую я люблю делать перед созданием сайта – это написание файла конфигурации, он будет содержать настройки к которым я, возможно, буду обращаться много раз. И так, я создаю файл с название config.php в /home/mywebsite/public_html/config.php. Создаем внем массив с названием $site с моими ключами и значениями, которые я буду использовать в дальнейшем. В этом руководстве я опишу переменные, которые мы будем использовать в классе PHPMailer. Вот пример моего файла config.php:
Этот пример очень прост, чтобы объяснять его. Далее мы продолжим свою работу и будем брать эти настройки по мере надобности.
Создаем класс, расширяющий PHPMailer
Сразу подчеркну, что вы должны создать класс расширения, это позволит упростить вам жизнь, далее я покажу как.
Класс расширения вызовет класс PHPMailer() и установит начальные значения, такие, как Email адрес от имени которого вы будете посылать письма, настройки почтового сервера, и так далее.
Каждый из этих параметров берется по умолчанию из файла config.php, но вы также можете переписать их при вызове нашего класса расширения. Таким образом, если вы не переопределите какой-либо из параметров в классе расширения, то он будет взят поумолчанию из файла config.php, и вам не надо каждый раз переопределять эти параметры. В этом и красота данного подхода!
Взгляните на наш класс расширения:
Далее мы рассмотрим этот код.
Разберем класс FreakMailer
Наш класс, показанный выше, очень прост. И вам необходимо обладать только базовыми навыками ООП, чтобы использовать его. Давайте разберемся.
Сначала нам необходимо подключить класс PHPMailer (файл class.phpmailer.php в директории lib). Это позволяет нам расширить класс PHPMailer, потому что делает объект доступным. Вы могли бы подключить его и в другом месте, но здесь это наиболее эффективно.
Структура управления классом
Далее, мы определяем структуру управления классом и даем ему имя при расширении класса PHPMailer.
Переменные класса
Идем дальше. Теперь мы определяем внутренние переменные. Большинство из них установлены поумолчанию в NULL, чтобы позже мы могли их переопределить, если есть необходимость заменить значения, установленные в config.php.
Давайте рассмотрим эти переменные:
После определения переменных, мы с вами можем обсудить функцию FreakMailer().
Функция FreakMailer()
Эта функция, в основном, настраивает начальные значения для класса PHPMailer, чтобы посылать почту.
Все дальнейшие действия – это, в основном, определение значений переменным класса PHPMailer. Если внутренняя переменная ($this->setting) не определена, мы берем значения из файла config.php. Я уже упоминал о том, что вы можете переопределить значения из config.php, здесь мы проверяем это.
Самое главное, что вы должны понять, это то, что все возможности PHPMailer все еще присутствуют и могут использоваться, несмотря на то, что мы его расширили. Единственное, что мы сделали здесь – это создали расширение, которое заботится о том, чтобы нам не надо было каждый раз вводить одни и теже данные, когда мы хотим послать сообщение.
Теперь, когда мы достаточно имеем представление о классе расширения, давайте попробуем отправить почту!
Отправка электронной почты средствами PHPMailer
Предварительная работа сделана и теперь у нас есть все, чтобы посылать письма средствами PHPMailer.
Первоначальное испытание
Это испытание очень важно, потому что в рамках данной статьи мы будем постоянно возвращаться к приведенному здесь коду. Если данный код у вас не заработает, перечитайте этот материал сначала и снова попробуйте. Наш первый пример мы сохраним в файле mailtest.php, который положим в корень нашего проекта. Вот его содержимое:
Давайте разберем этот код для лучшего его понимания.
Сначала мы подключаем наш конфигурационный файл, чтобы иметь доступ к массиву $site.
Далее, подключаем класс FreakMailer.
Теперь необходимо инициализировать наш класс расширения, а также класс PHPMailer.
Теперь PHPMailer готов и мы идем дальше.
Задаем тему письма и его содержание.
Теперь необходимо добавить адрес получателя.
Далее, посылаем сообщение и обрабатываем ошибки, если возникли.
Далее, мы очищаем список адресатов и список вложений.
Если вам только что пришло сообщение, которое вы отослали с помощью PHPMailer, – поздравляю!
Основные проблемы
Вот список некоторых (типичных) проблем, которые могут возникнуть у вас при отправлении почты при помощи PHPMailer (вероятнее всего, эти проблемы у вас возникли бы и при обычном отправлении писем):
Но, если у вас все заработало, давайте перейдем к отправке писем с определенными особенностями.
Использование дополнительных возможностей PHPMailer
Если вы уже здесь, но не читали при этом предыдущего материала – вернитесь и прочитайте, потому что здесь мы будем заниматься расширением базового примера.
PHPMailer имеет множество особенностей, например, добавление вложений, рассылка по списку адресатов и др. В этой части нашего материала мы с вами посмотрим, как это выглядит на практике.
Обработка адресов электронной почты
PHPMailer поддерживает много особенностей Адреса электронной почты, типа «Для» TO, «от» FROM и списков получателей, точная копия CC и Слепая точная копия BCC, Reply-TO и др. Давайте посмотрим, как использовать эти особенности.
Помните, что мы опираемся на основной пример, приведенный выше.
Добавление адреса отправителя (FROM)
В нашем основном примере адрес отправителя уже задан посредствам config.php и класса расширения, но вы в любой момент можете его переопределить. Например:
Если не определить FromName, то большинство почтовых клиентов в качестве имени подставят емаил.
Добавление адреса для ответа (Reply-To)
Поумолчанию, адрес для ответа совпадает с адресом, с которого вы отослали письмо (FROM). Однако вы можете определить разные адреса для ответа на ваше письмо:
ЗАМЕЧАНИЕ:
Вы можете задать несколько адресов для ответа. Для этого необходимо продублировать приведенный выше код столько раз, сколько вы имеете адресов (не забудьте в примере менять адреса на нужные вам).
Добавление нескольких получателей
Этот метод позволяет вам добавить нескольких получателей для письма. Я не рекомендую этот способ для анонимных листов рассылки. Смотрите позже пример для списка рассылки.
Для добавления нескольких получателей вы должны повторить вызов функции AddAddress столько раз, скольким людям вы хотите отослать ваше сообщение. Далее, пример для трех адресатов. В данном примере адрес является обязательным, а имя адресата опциональным и может быть опущено.
ЗАМЕЧАНИЕ:
Не рекомендуем пользоваться этим методом для рассылки по списку адресатов! Каждый получатель вашего письма будет видеть ВЕСЬ список получателей, а, затем, сможет использовать его по своему усмотрению. Позже мы расскажем как правильно отсылать письма по списку адресатов.
Добавить получателей точной копии (CC)
Вы можете добавить получателей точной копии точно также, как и предыдущих примерах, используя функцию AddCC.
Добавление получателей слепой точной копии (BCC)
Невидимых получателей или BCC можно добавить используя следущую функцию:
Требование подтверждения прочтения
Если вы хотите запросить у человека, читающего ваше письмо, подтверждение о прочтении, подайте следующую команду:
Теперь, когда мы рассмотрели все адреса для отправки почты, давайте посмотрим, как посылать письма ввиде HTML!
Отправление писем ввиде HTML при помощи PHP и PHPMailer
Формирование HTML письма – это одна из самых сложных задач при отправке почты средствами PHP. Настройка MIME заголовков и построение HTML – нелегкая задача и требует дополнительных знаний и исследований. Однако, PHPMailer сделает вашу жизнь проще, далее, мы покажем как это реализуется.
Важное замечание относительно почты ввиде HTML
Прежде чем мы приступим к отправке таких писем, я хотел бы, чтобы вы поняли, что важно знать о том, каким образом должны подключаться изображения и стили CSS, и т.д. Простое правило состоит в том, чтобы хранить эти файлы на сервере, а в письме давать полные ссылки на них. Если вы сходите сума и добавляете все эти файлы к письму, то готовьтесь к головной боли. Например, тело моего письма выглядит примерно так:
Как вы видете, я сделал каждый URL полным, а не сокращенным относительно моего документа. Если этого не сделать, то ваши изображения не будут грузиться и пользователь их не увидит!
Идем дальше, теперь нам необходимо отослать наше письмо. Для этого нам необходимо определить тело нашего письма и задать isHTML настройки. Следующий пример расширяет первоначальный базовый пример.
Дополнительные «тела» письма
Никогда не полагайтесь только на HTML при отправке писем, если ваше сообщение очень важное. Вы должны позаботиться о получателе и помимо HTML письма прикрепить и только text-only (только текст) версию сообщения, поскольку некоторые почтовые клиенты не умеют показывать HTML письма. Мы можем достигнуть такого эффекта добавляя дополнительные тела письма функцией AltBody класса PHPMailer. Давайте добавим текстовую версию вашего сообщения. Как только мы добавляем несколько тел письма – PHPMailer автоматически сформирует многослойное письмо.
Прикрепление файлов к письму
Прикрепить файл к письму – это чень легкая задача, если вы используете PHPMailer. Просто добавьте их письму точно также, как вы добавляли адреса. Вот пример:
Функция AddAttachment имеет 4 аргумента:
Путь до файла, естественно, полный путь до файла на диске, имя файла – название файла, который вы хотите прикрепить, кодирование – поумолчанию base64, тип заголовка – это тип заголовка, который вы хотите послать – поумолчанию – Application/octet-stream.
Как видите, все очень легко! Давайте перейдем с вами к использованию SMTP.
Использование внешнего(их) SMTP для работы с почтой средствами PHP
Сначала давайте обсудим использование внешнего SMTP вместо локального. В базовом примере мы с вами сделали config.php, где задали несколько вариантов для SMTP сервера. Если вы хотите указать больше SMTP серверов – сделать это можно также расширив config.php, установив $site[‘smtp_enabled’] = ‘enabled’; (включено).
В $site [‘smtp_host’] вы можете расширить список SMTP серверов, разделяя их точкой с запятой. Например:
Как я понимаю, PHPMailer попытается послать почту через первый сервер, если это не удается – через второй и так далее.
ЗАМЕЧАНИЕ:
Помните, что вы всегда можете включить авторизацию через SMTP или поменять порт в файле config.php.
Важное замечание, обращаю ваше внимание, что для отправки писем через SMTP необходимо использовать не стандартную функцию Send(), а функцию SMTPSend(). Например:
Проблемы с отправкой через SMTP
Есть много вариантов возникновения ошибок при работе с SMTP, в основном, все они касаются прав доступа:
К сожалению, я не уверен, что PHPMailer поддерживает соединение по протоколу POP перед соединением по SMTP. Если это создает проблему – свяжитесь со своим администратором и попросите хозяина релея прописать ваш IP адрес для сервера.
Использование qmail и Sendmail
Если вы хотите обойти функцию mail() PHP и использовать бинарные программы для работы с почтой, то вам необходимо определить тип почтового сервера, а затем PHPMailer запустит указанный бинарный файл, что, возможно, немного ускорит операции. Пример:
Как видите, это довольно легко! Давайте перейдем к построению простого списка адресатов.
Пример списка рассылки
Теперь, когда вы уже имеете достаточное представление о работе PHPMailer, давайте рассмотрим некоторые особенности списков рассылки. Выскажу несколько соображений о том, что вам может понадобиться при рассылке: настройка темы письма, тела письма. И, что наиболее важно, необходимо скрыть адреса получателей друг от друга.
Следующий пример предполагает, что у вас уже есть некоторая база данных со списком адресов и вы знаете как соединиться с базой MySQL. Пока мы предположим, что вы имеете что-то следующей структуры:
Предположим, что вы имеете 50 пользователей и хотите сделать настраиваемую рассылку по этим адресам. Следующий пример поможет вам в этом:
Разбор кода списка рассылки
Первая часть такая же, как и в нашем первом примере – мы подключаем необходимые файлы.
Далее, мы определяем тело нашего письма. Вы можете также читать его из файла, но мы, для простоты, держим его внутри этого скрипта.
Обратите внимание на условный тег . Позже, когда мы будем выполнять действия в цикле, командой str_replace() мы заменим этот тег на имя пользователя из базы данных.
Далее, мы инициализируем класс для работы с почтой.
Далее, мы получаем данные об адресатах из базы данных. И организуем цикл, в котором получаем последовательно каждый ряд в объект.
Теперь мы дошли до места, где происходит непосредственная отсылка почты. Черезвычайно важно разобраться в том, что мы здесь делам. Первая часть кода в основном занимается формированием переменной $member_name, которая будет содержать все данные текущего пользователя.
Следующая часть кода определяет предпочтения пользователя – HTML или plain-text. Если пользователь предпочитает HTML, то мы пошлем ему письмо ввиде HTML с включенным телом текстового письма. В противном случае – пошлем только текстовый вариант.
Внимательно проанализируйте текст выше, пока не достигните полного понимания. Вся необходимая информация для этого была в предыдущих частях нашего материала.
ЗАМЕЧАНИЕ:
Удостоверьтесь, что вы используете функции $mailer->ClearAddresses() и $mailer->ClearAttahements(), иначе адреса пользователей будут добавляться в конец списка.
Подведем итог
Этот обучающий курс должен дать вам хороший толчек в том, чтобы сделать свою жизнь проще при работе с почтой. И все это – благодаря превосходной библиотеке PHPMailer. Теперь вы можете посылать почту незадумываясь о заголовках и прочих трудностях.
Если вы настроите данный класс правильно, то в последующем, при создании других сайтов, вам не надо будет тратить свое время.
Я надеюсь, что вы найдете время посетить сайт класса PHPMailer и почитать документацию к нему и FAQ. Очень важно понять, как устроен класс и ознакомиться со взглядом разработчиков на него. К тому же, на сайте есть другая большая обучающая статья и некоторые примеры.
Рассылка сообщений посредством PHP может быть очень простой, а может быть очень сложной, все зависит от того, что и как вы собираетесь посылать. Кузьма Феськов 2014-09-11 http://www.sesmikcms.ru/resources/img/000/000/001/img_166_original-640-480.jpg http://www.sesmikcms.ru/pages/read/ischerpyvajuschaja-instrukcija-po-php-mailer/
Отличная статья! Может сделаете еще инструкцию по swiftmailer? Тоже очень хороший класс и работает быстрее phpmailer когда доходит речь до очень больших объемов.
Спасибо. Очень полезная статья. А как сделать рассылку по списку пользователей с учетом времени посещения? К примеру, мне надо давать периодические оповещения тем пользователям, которые не посещали сайт в течение 5-ти месяцев.