• Главная»
  • Уроки»
  • PHP»
  • Omnimail — единый интерфейс для отправки писем на базе разных платформ

Omnimail — единый интерфейс для отправки писем на базе разных платформ

В этом уроке мы расскажем о библиотеке, которая предоставляет единый интерфейс работы с самыми популярными email-провайдерами: AmazonSES, Mailgun, Mailjet, Mandrill, Postmark, Sendgrid, SendinBlue.

Для работы с каждым из этих провайдеров вам понадобится самостоятельно зарегистрироваться и получить ключи доступа.

Установка

Для функционирования библиотеки понадобится PHP 5.5+. Автор библиотеки рекомендует устанавливать её через composer. Для этого достаточно установить себе этот инструмент и в консоли выполнить команду:

composer require omnimail/omnimail

Провайдеры

AmazonSES

Установка

Для отправки почты через AmazonSES вам понадобится установить ещё одну зависимость: daniel-zahariev/php-aws-ses.

composer require daniel-zahariev/php-aws-ses

Использование

use Omnimail\Email;
use Omnimail\AmazonSES;

$sender = new AmazonSES($accessKey, $secretKey);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Mailgun

Установка

Для отправки писем посредством сервиса Mailgun понадобится установить mailgun/mailgun-php.

composer require mailgun/mailgun-php

Использование

use Omnimail\Email;
use Omnimail\Mailgun;

$sender = new Mailgun($apiKey, $domain);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Mailjet

Установка

В случае использования Mailjet установите зависимость mailjet/mailjet-apiv3-php.

composer require mailjet/mailjet-apiv3-php

Использование

use Omnimail\Email;
use Omnimail\Mailjet;

$sender = new Mailjet($apikey, $apisecret);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Mandrill

Установка

Для использования Mandrill потребуется загрузить библиотеку mandrill/mandrill.

composer require mandrill/mandrill

Использование

use Omnimail\Email;
use Omnimail\Mandrill;

$sender = new Mandrill($apiKey);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Postmark

Установка

Для работы с с сервисом Postmark потребуется библиотека wildbit/postmark-php.

composer require wildbit/postmark-php

Установка

use Omnimail\Email;
use Omnimail\Postmark;

$sender = new Postmark($serverApiToken);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Sendgrid

Установка

Для использования сервиса Sendgrid потребуется установить sendgrid/sendgrid.

composer require sendgrid/sendgrid

Использование

use Omnimail\Email;
use Omnimail\Sendgrid;

$sender = new Sendgrid($apiKey);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

SendinBlue

Установка

Работа с SendinBlue потребует установку mailin-api/mailin-api-php.

composer require mailin-api/mailin-api-php

Использование

use Omnimail\Email;
use Omnimail\SendinBlue;

$sender = new SendinBlue($accessKey);

$email = (new Email())
    ->addTo('example@email.com')
    ->setFrom('example@email.com')
    ->setSubject('Hello, world!')
    ->setTextBody('Hello World! How are you?');

$sender->send($email);

Email

Объект Email имплементирует интерфейс EmailInterface. Вы можете создать свой собственный класса Email реализовав методы интерфейса EmailInterface.

Получатель

Чтобы перечислить получателей письма достаточно воспользоваться методом addTo.

$email = new Email();
$email->addTo('recipent1@email.com', 'Recipient1 Name');
$email->addTo('recipent2@email.com', 'Recipient2 Name');

Откуда

Отправитель письма указывается путём установки значения свойству From.

$email = new Email();
$email->setFrom('sender@email.com', 'Sender Name');

CC (копия)

Свойство CC можно использовать для перечисления ящиков, которым нужно отправить копию письма.

$email = new Email();
$email->addCc('recipent1@email.com', 'Recipient1 Name');
$email->addCc('recipent2@email.com', 'Recipient2 Name');

BCC (скрытая копия)

Скрытые ящики, которым нужно отправить письмо.

$email = new Email();
$email->addBcc('recipent1@email.com', 'Recipient1 Name');
$email->addBcc('recipent2@email.com', 'Recipient2 Name');

Ответ на адрес

Имя и адрес, куда следует адресовать ответы на это письмо.

$email = new Email();
$email->setReplyTo('sender@email.com', 'Sender Name');

Тема письма

Свойство Subject хранить тему письма.

$email = new Email();
$email->setSubject('Hello, World!');

Текст письма

Простой текст письма.

$email = new Email();
$email->setTextBody('This is plain text.');

HTML текст письма

Если же вы хотите создать письмо в формате HTML, то нужно воспользоваться соответствующим методом.

$email = new Email();
$email->setHtmlBody('<h1>Hi!</h1><p>This is HTML!</p>');

Вложения

Свойство Attachments — контейнер для хранения вложенных файлов.

Пример: файл с текстом

use Omnimail\Email;
use Omnimail\Attachment;

$attachment = new Attachment();
$attachment->setName('my_file.txt');
$attachment->setMimeType('text/plain');
$attachment->setContent('This is plain text');

$email = new Email();
$email->addAttachment($attachment);

Пример: файл с диска

use Omnimail\Email;
use Omnimail\Attachment;

$attachment = new Attachment();
$attachment->setMimeType('text/plain');
$attachment->setPath(__DIR__ . '/my_file.txt');

$email = new Email();
$email->addAttachment($attachment);

Инлайн вложения

use Omnimail\Email;
use Omnimail\Attachment;

$attachment = new Attachment();
$attachment->setPath(__DIR__ . '/image.png');
$attachment->setContentId('image.png');

$email = new Email();
$email->setHtmlBody('<p>Hello!</p><img src="cid:image.png">');
$email->addAttachment($attachment);

Исключения

При возникновении ошибок могут быть выброшены следующие исключения:

  • Omnimail\Exception\Exception
  • Omnimail\Exception\EmailDeliveryException
  • Omnimail\Exception\InvalidRequestException
  • Omnimail\Exception\UnauthorizedException

Отловить их можно следующим образом.

try {
    $sender->send($email);
} catch (\Omnimail\Exception\Exception $e) {
    echo 'Something went wrong: ' . $e->getMessage();
}

Так же можно поймать и обработать какое-то конкретное исключение.

try {
    $sender->send($email);
} catch (\Omnimail\Exception\UnauthorizedException $e) {
    echo 'Your credentials must be incorrect';
} catch (\Omnimail\Exception\InvalidRequestException $e) {
    echo 'The request is badly formatted, check that all required fields are filled.';
} catch (\Omnimail\Exception\EmailDeliveryException $e) {
    echo 'The email did not go out.';
}

Логирование

Библиотека может работать с классом логирования, построенного согласно стандарту PSR-3.

Отправка писем протоколируется на уровне INFO. Ошибки на уровне ERROR.

Пример работы с Monolog

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Omnimail\Mailgun;

$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::INFO));

$sender = new Mailgun($apiKey, $domain, $logger);
$sender->send($email);

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://github.com/gabrielbull/omnimail
Перевел: Станислав Протасевич
Урок создан: 18 Июля 2016
Просмотров: 4688
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 19 Июля 2016 09:30
    es.vlad
    Что-то все сервисы заморские, да и платные((
    • 19 Июля 2016 09:48
      stas.protasevich
      У нас языки программирования и те заморские) Присмотритесь: к примеру Mailgun: от 0 - 10,000 писем — бесплатно, sendinblue — тоже есть бесплатный пакет и т.д.
      • 20 Июля 2016 08:56
        es.vlad
        подколол))
^ Наверх ^