Многим разработчикам PHP необходимо отправлять электронную почту из своего кода. Единственная функция PHP, которая поддерживает это напрямую, — это mail()
. Однако он не предоставляет никакой помощи в использовании таких популярных функций, как шифрование, аутентификация, HTML-сообщения и вложения.
Правильно отформатировать электронную почту на удивление сложно. Существует множество перекрывающихся (и противоречивых) стандартов, требующих строгого соблюдения ужасно сложных правил форматирования и кодирования — подавляющее большинство кода, который вы найдете в Интернете и напрямую использует функцию mail()
, просто неправильно, если не небезопасно!
Функция PHP mail()
обычно отправляет сообщения через локальный почтовый сервер, обычно работающий под управлением двоичного sendmail
на платформах Linux, BSD и macOS, однако Windows обычно не включает локальный почтовый сервер; Встроенный SMTP-клиент PHPMailer позволяет отправлять электронную почту на всех платформах без необходимости использования локального почтового сервера. Однако имейте в виду, что по возможности следует избегать использования функции mail()
; использовать SMTP для локального хоста и быстрее, и безопаснее.
Пожалуйста, не поддавайтесь искушению сделать это самостоятельно – если вы не используете PHPMailer, существует множество других отличных библиотек, на которые вам следует обратить внимание, прежде чем создавать свою собственную. Попробуйте SwiftMailer, Laminas/Mail, ZetaComponents и т. д.
Это программное обеспечение распространяется по лицензии LGPL 2.1 вместе с Обязательствами по сотрудничеству GPL. Пожалуйста, прочтите ЛИЦЕНЗИЮ для получения информации о доступности и распространении программного обеспечения.
PHPMailer доступен на Packagist (с использованием семантического управления версиями), а установка через Composer является рекомендуемым способом установки PHPMailer. Просто добавьте эту строку в файл composer.json
:
"phpmailer/phpmailer" : " ^6.9.2 "
или беги
composer require phpmailer/phpmailer
Обратите внимание, что папка vendor
и сценарий vendor/autoload.php
генерируются Composer; они не являются частью PHPMailer.
Если вы хотите использовать аутентификацию XOAUTH2, вам также необходимо добавить зависимость от league/oauth2-client
и соответствующего пакета сервисных адаптеров в ваш composer.json
или взглянуть на оболочку SendOauth2 @decomplexity, особенно если вы с помощью сервисов Microsoft.
В качестве альтернативы, если вы не используете Composer, вы можете загрузить PHPMailer в виде zip-файла (обратите внимание, что документация и примеры не включены в zip-файл), а затем скопировать содержимое папки PHPMailer в один из каталогов include_path
указанных в вашу конфигурацию PHP и загрузите каждый файл класса вручную:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
Если вы не используете класс SMTP
явно (вероятно, нет), вам не нужна строка use
для класса SMTP. Даже если вы не используете исключения, вам все равно необходимо загрузить класс Exception
, поскольку он используется внутри.
PHPMailer 5.2 (совместимый с PHP 5.0–7.0) больше не поддерживается, даже для обновлений безопасности. Вы найдете последнюю версию 5.2 в стабильной ветке 5.2. Если вы используете PHP 5.5 или более позднюю версию (а это должно быть так), переключитесь на версии 6.x.
Самые большие изменения заключаются в том, что исходные файлы теперь находятся в папке src/
, а PHPMailer теперь объявляет пространство имен PHPMailerPHPMailer
. Это имеет несколько важных последствий — более подробную информацию можно найти в руководстве по обновлению.
Хотя установка всего пакета вручную или с помощью Composer проста, удобна и надежна, вы можете включить в свой проект только важные файлы. По крайней мере, вам понадобится src/PHPMailer.php. Если вы используете SMTP, вам понадобится src/SMTP.php, а если вы используете POP-до SMTP ( очень маловероятно!), вам понадобится src/POP3.php. Вы можете пропустить языковую папку, если вы не показываете ошибки пользователям и можете обойтись только ошибками на английском языке. Если вы используете XOAUTH2, вам понадобится src/OAuth.php, а также зависимости Composer для сервисов, с помощью которых вы хотите пройти аутентификацию. Действительно, использовать Composer гораздо проще!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
В папке примеров вы найдете множество вариантов, которые охватывают множество распространенных сценариев, включая отправку через Gmail, создание контактных форм, отправку в списки рассылки и многое другое.
Если вы повторно используете экземпляр (например, при отправке в список рассылки), вам может потребоваться очистить список получателей, чтобы избежать отправки дубликатов сообщений. Дополнительные инструкции см. в примере списка рассылки.
Вот и все. Теперь вы готовы использовать PHPMailer!
По умолчанию PHPMailer использует английский язык, но в языковой папке вы найдете множество переводов сообщений об ошибках PHPMailer, с которыми вы можете столкнуться. Имена их файлов содержат код языка перевода ISO 639-1, например fr
для французского языка. Чтобы указать язык, вам нужно указать PHPMailer, какой из них использовать, например:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Мы приветствуем исправления и новые языки — если вы ищете исправления, запустите скрипт Language/TranslationCompletenessTest.php в папке тестов, и он покажет все недостающие переводы.
Начните читать вики GitHub. Если у вас возникли проблемы, обратитесь к руководству по устранению неполадок, поскольку оно часто обновляется.
Примеры использования PHPMailer для распространенных сценариев можно найти в папке примеров. Если вы ищете хорошую отправную точку, мы рекомендуем вам начать с примера Gmail.
Чтобы уменьшить объем развернутого кода PHPMailer, примеры не включены, если вы загружаете PHPMailer через Composer или через загрузку zip-файла GitHub, поэтому вам нужно будет либо клонировать репозиторий git, либо использовать приведенные выше ссылки, чтобы напрямую перейти к примерам.
Полная сгенерированная документация по API доступна в Интернете.
Вы можете создать полную документацию уровня API, запустив phpdoc
в папке верхнего уровня, и документация появится в папке docs
, хотя вам потребуется установить PHPDocumentor. Вы можете найти модульные тесты хорошим справочником по выполнению различных операций, таких как шифрование.
Если в документации нет того, что вам нужно, поищите множество вопросов в разделе «Переполнение стека», и прежде чем задавать вопрос «Ошибка SMTP: не удалось подключиться к хосту SMTP», прочтите руководство по устранению неполадок.
Тесты PHPMailer используют PHPUnit 9 с полифилом, позволяющим запускать тесты в стиле 9 на старых версиях PHPUnit и PHP.
Если это не проходит, можете ли вы чем-нибудь помочь?
Пожалуйста, сообщайте о любых обнаруженных уязвимостях ответственно – сообщайте о проблемах безопасности разработчикам в частном порядке.
См. БЕЗОПАСНОСТЬ и рекомендации по безопасности PHPMailer на GitHub.
Пожалуйста, отправляйте отчеты об ошибках, предложения и запросы на включение в систему отслеживания проблем GitHub.
Мы особенно заинтересованы в исправлении крайних случаев, расширении тестового покрытия и обновлении переводов.
Если вы нашли ошибку в документации или хотите что-то добавить, внесите изменения в вики — редактировать ее может каждый.
Если у вас есть клоны git, созданные до перехода в организацию PHPMailer GitHub, вам необходимо обновить все удаленные URL-адреса, ссылающиеся на старое местоположение GitHub, с помощью такой команды из вашего клона:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Пожалуйста, больше не используйте проекты SourceForge или Google Code; они устарели и больше не поддерживаются.
Время и ресурсы для разработки PHPMailer предоставлены Smartmessages.net, единственной в мире системой электронного маркетинга, ориентированной на конфиденциальность.
Пожертвования очень приветствуются, будь то пиво, футболки или наличные. Спонсорство через GitHub — это простой и удобный способ сказать «спасибо» сопровождающим и участникам PHPMailer — просто нажмите кнопку «Спонсор» на странице проекта. Если ваша компания использует PHPMailer, рассмотрите возможность участия в программе поддержки предприятий Tidelift.
Доступно как часть подписки Tidelift.
Разработчики PHPMailer и тысяч других пакетов сотрудничают с Tidelift, чтобы обеспечить коммерческую поддержку и обслуживание пакетов с открытым исходным кодом, которые вы используете для создания своих приложений. Экономьте время, снижайте риски и улучшайте работоспособность кода, платя при этом разработчикам тех пакетов, которые вы используете. Узнать больше.
См. журнал изменений.
coolbru
из Сан-Франциско) и Энди Прево ( codeworxtech
) взяли на себя управление проектом в 2004 году.