"Уже сегодня делай то, о чем другие будут думать завтра!"

modSwiftMailer

Сайдбар

Пакет может не устанавливаться в некоторых некорректно перенесенных копиях MODX. Эта проблема также может возникнуть и при стандартной установке, в случае, если папки не поддерживают Apache/root. Пожалуйста, обратитесь к разделу «Диагностика неполадок» за детальной информацией.

Что такое modSwiftMailer?

modSwiftMailer это стороннее дополнение от Марка Эрнста, расширяющее функционал modMail и обеспечивающее большие возможности конфигурации оригинального modMail (в сочетании с PHPMailer). modSwiftMailer базируется на Swift Mailer, открытой библиотеке Криса Корбина. И, хотя основные функции modSwiftMailer используются почти так же, как в modPHPMailer, дополнение несколько отличается и располагает рядом преимуществ.

Будущие разработки

У меня есть некоторые планы на будущее, которые вы найдете в readme.txt, когда загрузите modSwiftMailer. Ниже вы познакомитесь с будущими разработками для modSwiftMailer. Эти дополнения не обладают крайней технической необходимостью и не работают в связке, а, значит, они могут быть запущены раньше или позже, по мере надобности.

  • Встроенные приложения
  • Расширенный отладочный функционал для mod log
  • Автоконфигурация (при помощи одной команды)
  • Автозагрузка (при помощи одной команды)
  • Оригинальные заголовки с датой
  • Более обширная документация readme
  • Дополнение для валидации: MX Record check
  • Доработка декоратора MODX/Swift Mailer для совместимости с классом modParser

Текущая версия

Текущая версия поддерживает 90% обычных пользовательских функций Swift Mailer. В changelog.txt вы можете увидеть, что было добавлено/исправлено/улучшено, а в разделе «Будущие разработки» познакомиться с планами на будущее.

Требования

  • MODx Revolution 2.0.2-pl или более поздняя версия
  • PHP5 или более поздняя версия
  • Знания modMail

История

modSwiftMailer была создана и разработана Марком Эрнстом (ReSpawN) и выпущена 18 июля 2011 года.

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

Я попытался максимально облегчить переход от modPHPMailer к modSwiftMailer, так что вас ждет не так уж много отличий.

Базовое простое письмо

Сначала мы создадим базовое простое письмо. Это аккуратный кусочек кода, который вы, скорее всего, будете использовать для тестирования фрагмента кода разработчика.

$modx->getService('mail', 'mail.modSwiftMailer'); $modx->mail->address('to', 'recipient@domain.tld', 'Recipient'); $modx->mail->address('sender', 'sender@domain.tld'); $modx->mail->subject('Dear GOD why won\'t my code function properly!'); $modx->mail->body(print_r($data, true)); $modx->mail->send();



Ребята, не поленитесь включить этот код в сниппет. Если у вас правильно настроен MODX, он будет отправлять письмо с темой, готовым к печати.

Вы могли заметить, что после modPHPMailer не хватает нескольких строк кода. К примеру, нет строк modMail::MAIL_FROM, поля reply-to, setHTML, кода, выявляющего ошибку, и функции сброса параметров.
Основная задача modSwiftMailer заключается в отправке текстовых или html-писем с 8-битным шифрованием в кодировке UTF-8. Это значит, что вы можете вписать ЛЮБОЙ фрагмент кода в modSwiftMailer, не изменяя дефолтных установок и не переопределяя линии поведения (например, setHTML). Но об этом дальше.

Сейчас вы уже получили свое первое письмо от modSwiftMailer и готовы втянуться в работу. Попробуем расширить возможности электронной почты, используя следующие примеры.

Примеры

Отправка простого письма

Следующий код позволит вам отправить письмо одному получателю. Если вы хотите применять этот код для [каждого] цикла, вам следует использовать $modx->mail->reset() после [внутри] каждого цикла.


$modx->getService('mail', 'mail.modSwiftMailer');

$modx->mail->address('to', 'recipient@domain.tld', 'Recipient');

$modx->mail->address('sender', 'sender@domain.tld');

$modx->mail->subject('A simple e-mail');

$modx->mail->body('

Simple e-mail

With a basic message

');


$modx->mail->send();

Более сложные операции; отправка нескольким получателям

Дополнение modSwiftMailer было разработано так, чтобы отправлять письмо списку получателей. Осуществить это можно несколькими способами.

Для начала запустите modSwiftMailer service.


$modx->getService('mail', 'mail.modSwiftMailer')

Теперь modSwiftMailer позволит реализовать практически любой формат, который вы пожелаете, но у каждого из форматов будет разный вывод.


$modx->mail->address('to', 'recipient@domain.tld', 'Recipient')

будет добавлять один e-mail - "recipient@domain.tld" с именем "Recipient".

Проработаем небольшой сценарий с письмами и напишем ребятам из «Как я встретил вашу маму» (How I Met Your Mother).

$modx->mail->address('to', array( 'barneystinson@howimetyourmother.tld' => 'Barney Stison', 'tedmosby@howimetyourmother.tld' => 'Ted Mosby' ));

будет добавлять два адреса электронной почты: "barneystinson@howimetyourmother.tld" с именем "Barney Stison" и "tedmosby@howimetyourmother.tld" с именем "Ted Mosby".

Кроме того, что приведено в примере, есть и другой способ отправить письмо одному и тому же человеку с несколькими электронными адресами. По счастью, эта функция не нужна будет вам, разве что вы решите написать большой корейской семье Ли, но это уже другая история.


$modx->mail->address('to', array(

    'barneystinson@howimetyourmother.tld',

    'tedmosby@howimetyourmother.tld'

), 'How I Met Your Mother cast');

будет добавлять два адреса: "barneystinson@howimetyourmother.tld" и "tedmosby@howimetyourmother.tld", оба с именем "How I Met Your Mother cast".

Теперь представьте, что ваша форма была добавлена в FormIt postHook, где есть опциональное поле «Полное имя» (или «имя», или «имя пользователя»), которое не всегда настроено и содержит какие-то данные. Тогда ваши письма будут выглядеть убого.


$modx->mail->address('to', array(

    'barneystinson@howimetyourmother.tld',

    'tedmosby@howimetyourmother.tld' => 'Ted Mosby'

));

И, хотя я считаю, что первый, второй и четвертый пример будут использоваться чаще всего, я решил не останавливаться на достигнутом.

Опять же, в сомнительно написанном FormIt postHook вы, возможно, захотите отправить одно письмо по BCC (Blind Carbon Copy, она же – скрытая копия). Это просто:


$modx->mail->address('bcc', 'phantom@theopera.tld', 'Phantom');

А теперь посмотрим, что же отличает наши письма от обычных моментальных, как начало насморка, электронных писем. Это пара строк, которая определяет отправителя сообщения:


$modx->mail->address('sender', 'sender@domain.tld');

$modx->mail->address('from', 'from@domain.tld', 'Graphical sender');

Строка «отправитель» всегда появляется в заголовках ваших писем. Обычно это предустановленный no-reply адрес веб-сервера, но так бывает не всегда. Если вы хотите, чтобы ваше письмо не было отмечено как спам, просто используйте that! (однако, если ваш электронный ящик действительно спамный, это не поможет). Поле "from" подхватывается почтовой программой. Она показывает имя сразу после темы ("Graphical sender") и, когда вы просматриваете детали (или заголовки), она отображает: "Graphical sender <from@domain.tld>".

Наконец, вы можете определить адрес пересылки и адрес для ответа. Если вы не предоставляете адрес для ответа, дополнение подберет нужное из списка отправителей или электронных адресов (зависит от программы).

$modx->mail->bounce('bounce@domain.tld'); $modx->mail->receipt('receipt@domain.tld'); $modx->mail->replyto('no-reply@domain.tld');

Да, тут есть один момент. Этот код не поддерживается браузерами, но я надеюсь, что Outlook и Thunderbird подхватят его как уведомление о прочтении.

Ну и, конечно, мы захотим отправить письмо всем заданным получателям (поля «to», «cc» и «bcc»). И, конечно, мы добавим тему и содержание:


$modx->mail->subject('A subject');

$modx->mail->body('Some content');


$modx->mail->send();

Диагностика неполадок

Мои письма не отправляются

Я использую родное почтовое приложение
Ваш SMTP-провайдер не воспринимает ваши команды, или запросы, а, может, дело в том, что электронный адрес, на который вы хотите отправить сообщение, некорректен. Если вы работаете на локальном компьютере (Windows 32/64bit, Linux или Mac), то вам потребуется рабочий SMTP от вашего хоста. Обычно его можно получить, отследив ваш текущий IP (Windows tested). Просто отследите ваш внешний IP и, как минимум, часть параметров у вас будет (dynamic.host.tld). Запишите полученные данные в php.ini (WAMP, LAMP) и все получится.

Я использую sendmail (Linux)
Тут все не так просто, потому что любая машина на базе Linux настроена по-своему. Пожалуйста, откройте MAIL_ENGINE_PATH (используется вместе с sendmail) и проверьте, все ли корректно. Проверять можно с помощью modPHPMailer. Если в этом случае modPHPMailer работает (и побеждает modSwiftMailer), дайте мне знать.

Я использую внутренний SMTP (ISP)
ISP расшифровывается как Interner Service Provider, и, по сути, это то же, что и "SMTP-провайдер" в подразделе Я использую родное почтовое приложение. Пожалуйста, обратитесь в этот подраздел за детальной информацией.

Я использую внешний SMTP
Пожалуйста, проверьте, правильно ли настроена аутентификация. SMTP требует правильное имя хоста, порт и аутентификацию. Аутентификация обычно представлена в формате имя пользователя плюс пароль (user: smtp@domain.tld, pass: doh?).

Я не могу отправлять свои e-mail’ы из-за какой-то Return-Path

Попробуйте настроить одно значение из трех (а лучше – все три): отправитель (sender), адрес пересылки (Return-Path) и отправка с адресов (from addresses).

Мойпакетнеустанавливается

Здесь может быть небольшой косяк с моей стороны. Попробуйте задать для директории model/modx/mail параметры CHMOD 0777 и повторить установку.




Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

telegram: @Accusser
skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Sign In