Отправка электронной почты с помощью Mailgun PHP API
Мы собираемся начать это руководство с того, что транзакционная электронная почта повсюду, и важно, чтобы мы все делали правильно. Если электронная почта не работает должным образом, это может означать потерю дохода для вашего бизнеса и в целом создает неприятные ощущения для клиентов.
Как разработчик, вы всегда ищете самый простой (экономичный по времени) и эффективный способ решения проблемы. Вы часто достигаете этого, выполняя два условия:
Использование внешних библиотек, применимых к вашему решению.
Разработка масштабируемых приложений.
Первое условие объяснять не надо — ведь вы же не начнете писать ОС, не написав приложение, верно? На протяжении всего поста мы рассмотрим, как использовать предварительно написанные пакеты для отправки электронной почты. А теперь перейдем ко второму пункту: читайте дальше.
Для масштабируемого дизайна вам подойдут такие сервисы, как Mailgun. Вы можете рассчитывать на многофункциональное решение, отвечающее требованиям для отправки больших объемов электронной почты.
Если вы заботитесь о доставке (а вы должны), Mailgun предлагает высокую надежность, поскольку он разработан для очень хорошей обработки транзакционной электронной почты. Вы можете настроить несколько доменов и выбрать, хотите ли вы делиться IP-адресами или создавать свою собственную репутацию. Чтобы защитить заголовки ваших электронных писем, Mailgun требует, чтобы в учетную запись были добавлены DKIM и SPF, а также чтобы они прошли проверку на уровне аутентификации и выравнивания. Все эти вещи работают вместе, чтобы помочь вам с доставкой электронной почты.
Теперь к приятному: настройка PHP-скрипта-оболочки для Mailgun . Сначала мы будем использовать менеджер пакетов, а затем посмотрим примеры его применения.
PEAR — это инициатива сообщества, которая позволяет нам повторно использовать компоненты кода PHP, в то время как зависимый код также добавляется и поддерживается.
Во-первых, вам понадобится PHP и менеджер пакетов для продолжения. Их лучше всего устанавливать с помощью Debian Advanced Package Manager (APT), если вы используете Linux.
Хотя PEAR — это более старое решение, оно по-прежнему широко используется и является сокращением от PHP Extension and Application Repository. Судя по установленной версии PHP, у вас, вероятно, уже есть PEAR. Вы можете проверить, запустив груша
команда без аргументов. Если вы получили предупреждение о том, что в вашей системе его нет, просто запустите: sudo apt install php-pear. Теперь мы готовы установить сторонний PHP-код с помощью PEAR.
Если вы следуете этой статье, используя код, это точка, где вы должны открыть свою учетную запись Mailgun , чтобы получить доступ к API . Если вы застряли, просто ознакомьтесь с этими советами по началу работы.
Шаги с PEAR применяются следующим образом:
Установка зависимостей проекта и включение пакетов с помощью основного класса или сценария vendor/autoloader. php
Предоставление переменных, связанных с API
Создание экземпляра класса/клиента Mail отправить электронное письмо (а)
Просто, не так ли?
Мы можем установить пакет Mail, набрав sudo pear install Mail
. После завершения установки следующим шагом будет включение этого в файл сценария:
require_once "Mail.php";
Сэкономьте время и сделайте так, как предлагает наш шаблон, а затем укажите переменные, специфичные для API.
Если вы перейдете на панель инструментов API, вы можете найти следующие необходимые фрагменты информации на вкладке домена:
Нам нужен хост
, учетная запись пользователя и переменные пароль
, а также порт
3 для использования 9003 :
Мы используем SMTP-соединение для отправки электронной почты через нашу учетную запись Mailgun.
Мы собираем вышеуказанные параметры в массив и создаем экземпляр класса Mail
следующим образом: Здесь переменная $to
содержит значение адреса получателя, а переменная $headers
представляет собой массив, содержащий дополнительные поля для доставки.
На этом этапе вы можете проверить полный окончательный код:
Вы можете скачать полный исходный код здесь.
Если вы все настроили, то можете попробовать запустить скрипт: php mailer.php.
Вы запускаете его и получаете уродливую трассировку стека ошибок! Внимательно изучите его:
Неустранимая ошибка PHP: Uncaught Error: Class 'Net_SMTP' не найден в /usr/share/php/Mail/smtp>php:366.
Это означает, что мы забыли добавить еще одну зависимость проекта, необходимую для использования PEAR Mail. Запустите sudo pear install Net_SMTP 9.0034 и попробуйте еще раз!
Вывод:
Сообщение успешно отправлено!
Если вы следили, то ваше сообщение должно было прийти на указанный почтовый ящик, и я вам молча аплодирую. Браво!
Мы увидели пример сценария для начала работы с Mailgun с менеджером пакетов PEAR и создали PHP-скрипты для отправки электронной почты с помощью SMTP и HTTP API. Но есть и другие варианты, которые вы можете использовать, если PEAR вам не подходит. На самом деле вы можете воспроизвести тот же результат с помощью Composer, и Mailgun подробно рассказывал об этом ранее в блоге.
И, конечно же, если вы хотите улучшить свои навыки работы с PHP, вот несколько моих любимых ресурсов, которые я бы порекомендовал для отправки электронной почты с помощью PHP и работы с HTML электронной почты в целом.
Зарегистрироваться
Узнайте, чего вы можете добиться с помощью лучшей в мире платформы доставки электронной почты.
Электронная почта — Последняя версия руководства администратора Nextcloud последняя документация
Nextcloud может отправлять электронные письма для сброса пароля, уведомляя пользователей о новых файловые ресурсы, изменения в файлах и уведомления об активности. Ваши пользователи настраивают какие уведомления они хотят получать на своих Персональных страницах.
Nextcloud не содержит полноценного почтового сервера, а подключается к вашему существующий почтовый сервер. У вас должен быть работающий почтовый сервер, чтобы Nextcloud мог умеет отправлять электронные письма. У вас может быть почтовый сервер на том же компьютере, что и Nextcloud, или это может быть удаленный сервер.
Чтобы получить доступ к странице настройки ниже, войдите в систему с учетной записью администратора. Нажмите на свой аватар в правом верхнем углу, а затем нажмите «Настройки». С левой стороны под Администрацией и нажмите Основные настройки.
С помощью мастера подключение Nextcloud к вашему почтовому серверу выполняется быстро и легко.
Мастер заполняет значения в
, поэтому вы можете использовать либо
или оба, как вы предпочитаете.
Мастер электронной почты Nextcloud поддерживает три типа подключения к почтовому серверу: SMTP, qmail и Sendmail. Используйте конфигуратор SMTP для удаленного сервера или Sendmail, когда ваш почтовый сервер находится на том же компьютере, что и Nextcloud.
Примечание
Параметр Sendmail относится к SMTP-серверу Sendmail и любому
вставная замена Sendmail, такая как Postfix, Exim или Courier. Все
они включают sendmail
двоичные и свободно взаимозаменяемы.
Настройка SMTP-сервера
Вам потребуется следующая информация от администратора почтового сервера, чтобы подключить Nextcloud к удаленному SMTP-серверу:
Тип шифрования: Нет, SSL/TLS или STARTTLS
Адрес отправителя, который вы хотите использовать для исходящих писем Nextcloud
Требуется ли аутентификация
Метод аутентификации: Нет, Логин, Обычный или NT LAN Manager
IP-адрес сервера или полное доменное имя и порт SMTP
Учетные данные для входа (если требуется)
Примечание
Параметр overwrite.cli.url
из config.php
будет использоваться для SMTP EHLO.
Ваши изменения сохраняются немедленно, и вы можете нажать кнопку «Отправить письмо», чтобы протестируйте свою конфигурацию. Это отправляет тестовое сообщение на адрес электронной почты, который вы настраивается на вашей Личной странице. В тестовом сообщении говорится:
Если вы получили это письмо, настройки кажутся правильными. -- Nextcloud безопасный дом для всех ваших данных
Настройка Sendmail/qmail
Для настройки Sendmail или qmail требуется только выбрать один из них вместо SMTP, а затем введите желаемый обратный адрес электронной почты.
В большинстве случаев лучше всего использовать вариант SMTP
, так как вы сможете контролировать все
параметров вашего почтового сервера в одном месте, затем в конфигурации вашего почтового сервера.
Использование шаблонов электронной почты
Мы разработали механизм, который генерирует электронные письма в соответствии с темой настройки и выглядеть одинаково во всех различных почтовых клиентах.
Примечание
Если по какой-то причине вам нужны только текстовые электронные письма, рассмотрите возможность простой настройки это на стороне клиента или позволить принимающему (или даже отправляющему) почтовому серверу сбросить HTML часть. Обратите внимание, что , отправляющий электронные письма в формате HTML, не влияет на безопасность, просто от их отображения и, таким образом, любой риск безопасности может быть уменьшен только путем отключения показ HTML на клиенте (или удаление части HTML на почтовом сервере).
Изменение внешнего вида сообщений электронной почты за пределами возможностей приложения тем
Вы можете перезаписать шаблоны, написав класс, реализующий интерфейс шаблона. (или расширяет его, чтобы не нужно было копировать все). Самый простой способ - поместить этот класс в приложение и загрузите его, чтобы вам не нужно было исправлять его при каждом обновлении.
Это интерфейс класса, который необходимо реализовать: https://github.com/nextcloud/server/blob/master/lib/public/Mail/IEMailTemplate.php
Это реализация, которую можно расширить и использовать, чтобы увидеть, как она работает: https://github.com/nextcloud/server/blob/master/lib/private/Mail/EMailTemplate.
Пример из проблемы GitHub:
Посмотрите исходный код расширенного класса OC\Mail\EMailTemplate::class
Затем переопределите то, что вам нужно, в своем собственном OC\Mail\EMailTemplate::class extension
Пример:
Предположим, что нам нужно переопределить заголовок письма:
// изменение заголовка электронной почты вашей темы таблица> ЭОФ; }
Затем в
config/config.php
изменитеmail_template_class
на пространство имен вашего класса:'mail_template_class' => 'OCA\\MyApp\\MyClass',
Подробное пошаговое руководство вы найдете на нашем портале поддержки.
Настройка параметров почтового сервера в config.
php При желании вы можете установить параметры почтового сервера в config/config.php
.
Следующие примеры относятся к SMTP, Sendmail и Qmail.
SMTP
Если вы хотите отправлять электронную почту с помощью локального или удаленного SMTP-сервера, необходимо для ввода имени или IP-адреса сервера, опционально с двоеточием отдельный номер порта, например. :425 . Если это значение не задано по умолчанию порт 25/tcp будет использоваться, если вы не измените его, изменив параметр mail_smtpport .
"mail_smtpmode" => "SMTP", "mail_smtphost" => "smtp.server.dom:425",
или
"mail_smtpmode" => "SMTP", "mail_smtphost" => "smtp.server.dom", "mail_smtpport" => 425,
Если на SMTP-сервере запущен сканер вредоносных программ или спама, возможно, необходимо, чтобы вы увеличили время ожидания SMTP, например. 30-е:
"mail_smtptimeout" => 30,
Если SMTP-сервер принимает небезопасные соединения, значение по умолчанию может быть б/у:
"mail_smtpsecure" => '',
Если SMTP-сервер принимает только безопасные соединения, вы можете выбрать между следующие два варианта:
SSL
Будет установлено защищенное соединение по протоколу SMTPS. который использует порт 465/tcp:
"mail_smtphost" => "smtp.server.dom:465", "mail_smtpsecure" => 'ssl',
TLS
Безопасное соединение будет инициировано с использованием протокола STARTTLS, который использует порт по умолчанию 25/tcp:
"mail_smtphost" => "smtp.server.dom", "mail_smtpsecure" => 'tls',
Ну и напоследок надо настроить если SMTP сервер требует аутентификации, если нет, значения по умолчанию могут быть приняты как есть.
"mail_smtpauth" => ложь, "mail_smtpname" => "", "mail_smtppassword" => "",
Если требуется аутентификация SMTP, вы должны установить требуемое имя пользователя и пароль и может дополнительно выбирать между типами аутентификации ВХОД (по умолчанию) или ОБЫЧНЫЙ .
"mail_smtpauth" => правда, "mail_smtpauthtype" => "ВХОД", "mail_smtpname" => "имя пользователя", "mail_smtppassword" => "пароль",
Опытные пользователи могут добавлять дополнительные параметры потока в config/config. php
,
который сопоставляется непосредственно с Swift Mailer streamOptions
параметр конфигурации:
"mail_smtpstreamoptions" => массив(),
Отправить письмо
Если вы хотите использовать известную программу Sendmail для отправки электронной почты,
необходимо иметь установленную и работающую систему электронной почты на вашем сервере *nix.
Бинарный файл sendmail (
"mail_smtpmode" => "отправить почту", "mail_smtphost" => "127.0.0.1", "mail_smtpport" => 25, "mail_smtptimeout" => 10, "mail_smtpsecure" => "", "mail_smtpauth" => ложь, "mail_smtpauthtype" => "ВХОД", "mail_smtpname" => "", "mail_smtppassword" => "",
Qmail
Если вы хотите использовать программу qmail для отправки электронной почты, необходимо иметь установленная и работающая почтовая система qmail на вашем сервере. Бинарный файл qmail установленный на вашем сервере, будет использоваться для отправки электронной почты. Nextcloud должен иметь возможность отправлять электронную почту из коробки.
"mail_smtpmode" => "qmail", "mail_smtphost" => "127.0.0.1", "mail_smtpport" => 25, "mail_smtptimeout" => 10, "mail_smtpsecure" => "", "mail_smtpauth" => ложь, "mail_smtpauthtype" => "ВХОД", "mail_smtpname" => "", "mail_smtppassword" => "",
Отправить тестовое письмо
Чтобы проверить конфигурацию электронной почты, сохраните адрес электронной почты в личном кабинете. настройки, а затем используйте кнопку Отправить электронное письмо на сервере электронной почты 9.0350 секция на странице настроек администратора.
Поиск и устранение неисправностей
Если вы не можете отправить электронную почту, попробуйте включить отладку. Сделайте это, включив
параметр mail_smtpdebug
в config/config.php
.
"mail_smtpdebug" => истина;
Примечание
Сразу после нажатия кнопки Отправить электронное письмо , как описано ранее на экране появилось несколько сообщений SMTP -> get_lines(): … . Это ожидаемое поведение, и его можно игнорировать.
Вопрос : Почему мой веб-домен отличается от моего почтового домена?
Ответ : Имя домена по умолчанию, используемое для адреса отправителя, является именем хоста. где обслуживается ваша установка Nextcloud. Если у вас другой почтовый домен name вы можете переопределить это поведение, установив следующую конфигурацию параметр:
"mail_domain" => "example.com",
Этот параметр приводит к тому, что каждое электронное письмо, отправляемое Nextcloud (например, пароль сбросить адрес электронной почты), где доменная часть адреса отправителя выглядит следующим образом:
[email protected]
Вопрос : Как узнать, доступен ли SMTP-сервер?
Ответ : Используйте команду ping для проверки доступности сервера:
пинг smtp.server.dom
PING smtp.server.dom (ip-адрес) 56(84) байт данных. 64 байта от your-server.local.lan (192.168.1.10): icmp_req=1 ttl=64 время = 3,64 мс
Вопрос : Как узнать, прослушивает ли SMTP-сервер определенный TCP-порт?
Ответ : Лучший способ получить информацию о почтовом сервере - это спросить вашу почту
админ сервера. Если вы являетесь администратором почтового сервера или вам нужна информация в
спешите, вы можете использовать команду netstat
. В этом примере показаны все активные
серверы в вашей системе и порты, которые они прослушивают. SMTP-сервер
прослушивание локального порта 25.
# netstat -pant
Активные интернет-соединения (серверы и установленные) Proto Recv-Q Send-Q Локальный адрес Внешний адрес Идентификатор состояния/имя программы TCP 0 0 0.0.0.0:631 0.0.0.0:* ПРОСЛУШИВАТЬ 4418/cupsd TCP 0 0 127.0.0.1:25 0.0.0.0:* ПРОСЛУШАТЬ 2245/exim4 TCP 0 0 127.0.0.1:3306 0.0.0.0:* ПРОСЛУШАТЬ 1524/mysqld
25/tcp не зашифрован smtp
110/tcp/udp не зашифрован pop3
143/tcp/udp не зашифрован imap4
465/tcp — зашифрованная отправка
587/tcp — отправка с оппортунистическим шифрованием
993/tcp/udp зашифрован IMAP
995/tcp/udp зашифрован pop3s
Вопрос : Как определить, поддерживает ли SMTP-сервер протокол SMTPS? протокол?
Ответ : хороший признак того, что SMTP-сервер поддерживает протокол SMTPS. заключается в том, что он прослушивает отправку порта 465 .
Вопрос : Как определить, какие протоколы авторизации и шифрования почтовый сервер поддерживает?
Ответ : SMTP-серверы обычно сообщают о доступности STARTTLS
сразу после установления соединения. Вы можете легко проверить это
используя телнет Вопрос : Как я могу отправлять почту при использовании самозаверяющих сертификатов, если
на удаленном SMTP-сервере нет возможности разрешить это на их стороне? Ответ : Если у вас есть удаленная настройка SMTP, вы можете попробовать добавить это
к вашему 9]'.
220 smtp.domain.dom ESMTP Exim 4.80.1 Вт, 22 января 2013 г. 22:39:55 +0100
EHLO your-server.local.lan # <<< введите эту команду
250-smtp.domain.dom Здравствуйте, your-server.local.lan [ip-адрес]
250-РАЗМЕР 52428800
250-8БИТИМИМ
250-ТРУБОПРОВОД
250-AUTH PLAIN LOGIN CRAM-MD5 # <<< Поддерживаемые протоколы аутентификации
250-STARTTLS # <<< Поддерживается шифрование
250 ПОМОЩЬ
ВЫЙТИ # <<< введите эту команду
221 smtp.domain.dom закрывает соединение
Соединение прервано внешним хостом.
config/config.