Отправка письма на e-mail через сервис MODX modMail
15 мая 2014, 19:19
В разделе «Репосты» расположены чужие статьи, которые мне понравились или показались полезными.
Для меня стало настоящим открытием то, что в MODX есть встроенный сервис для отправки писем на e-mail. Конечно, кто-то знает об этом, и возможно очень давно, но я узнал о такой возможности совсем недавно (уверен, не я один).
Ранее для таких целей у меня был заготовлен сниппет, в котором такая же ф-ция была описана, а теперь, похоже, что он мне больше не понадобится.
/*Активируем почтовый сервис MODX*/
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
/*Адрес получателя нашего письма*/
$modx->mail->address('to', 'user@example.com');
/*Заголовок сообщения*/
$modx->mail->set(modMail::MAIL_SUBJECT, 'Ваша учётная запись активирована');
/*Подставляем чанк с телом письма (предварительно его нужно создать)*/
$modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('myEmailTemplate'));
/*Отправляем*/
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
Как видите, все предельно просто. Для отправки писем можно создавать любые условия на PHP, получать поля из форм, и даже использовать этот код в плагине для отправки писем через админку.
Лайкайте, комментируйте. Спасибо за внимание.
Используемые материалы: http://rtfm.modx.com/display/revolution20/modMail
Ну и такая маленькая приятная мелочь, как привязка файла. Путь к файлу от корня сайта.
$modx->mail->attach($attachment);
Источник: http://community.modx-cms.ru/blog/documentation/10611.html
$modx->mail->attach($attachment);
А как получить путь к файлу загруженному через форму?
$attachment =?
Когда я ставлю стандартный хук — email, то картинка прикрепляется к письму.
Но мне нужно через свой хук сделать через отправку modPHPMailer
// прикрепляем файл
$uploaddir = '/public_html/site/assets/image/';
$attachment = $uploaddir. basename($_FILES['photo']['name']);
$uploaddir=?
Спасибо
/core/components/formit/model/formit/fihooks.class.php#L439-L448
Нужно только сделать по аналогии.
В итоге нашел такую функцию в файле core/model/modx/mail/modmail.class.php
Долго не мог понять как же получить $file.
По вашей ссылке видно что $file= $v['tmp_name'];
Итого решение:
// с формы:
// в сниппете
// прикрепляем файл
Большое спасибо за Ваше время. Всего хорошего Вам.
В общем, суть такова, что была форма обратной связи обычная (FormIt+AjaxForm) и теперь понадобилось через неё ещё файлы цеплять, с ограничением: только один файл, размером до 5 Мб, doc, xls, pdf.
Я не силен программированием, поэтому думаю загружать файлы компонентом Uploadify (это поможет с ограничениями).И у меня вопрос, как отправить загруженный файл, а после отправки удалить (они не нужны на сервере)? Есть уже готовые решения для этого? Потому что и на другом сайте хотят примерно такую форму.
У меня почему то со снипетом Formit и AjaxForm, ругаеться на адрес маил в форме. Поставил сниппет QuickEmail
Mailer error info: Невозможно запустить функцию mail
Что делать? Может с вашим кодом получиться
Если QuickEmail сообщает, что невозможно запустить функцию mail, значит, надо обращаться в техподдержку хостинга — видимо, эта функция просто-напросто отключена
передать плейсхолдеры email и name?
в чанке так вызываю [[+email]] и [[+name]] на почту приходят в таком же виде.
Отправляю через Formit через hook
Но если сервер обычный, то столько писем отправить за раз не получится. Тем более, вряд ли почтовые службы не заметят такой большой рассылки — скорее всего письма начнут удаляться спам-фильтрами. Лучше использовать для рассылок специальные сервисы — люди за это не зря деньги берут.
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
и пока эта проверка не осуществится, следующее письмо не полетит. правильно я понимаю?
Чтобы отправить письмо через SMTP, нужно, чтобы в системных настройках MODX стояли соответствующие настройки. Я так сделала, письма с помощью Formit отправляются, а из самописной рассылки — нет.
И второй вопрос: как сформировать письмо с подписью DKIM? В DNS она прописана, письма с сервера отправляются с подписью, но в самописном компоненте, где мы сами формируем письмо этой подписи нет.
Только на Вашем сайте, нашел описание на русском, сервиса отправки писем MODX!
Помогите внедрить изображения Товаров в тело письма в miniShop2.
В функции sendEmail
В шаблоне tpl.msEmail:
Как в функцию embedImage через сниппет sendEmailImagePath
передать
Спасибо
Нашел единственный пост по теме, только автор не указал — как решил задачку.
Решение — по аналогии с function attach (несколькими постами выше)
Помогите аргументы в функцию передать.
Спасибо
PS Для «чистого» PHP — есть решение, не могу под MODX+miniShop2 адаптировать.
Вы разобрались с сервисом MODX modMail.
Чтобы внедрить изображения в тело письма (не аттачем) нужно указать
Как это сделать?
Спасибо
У нас появилась задача отравить письмо данным методом, но отложить отправку на 3 часа. Может Вам приходилось сталкиваться с отложенной отправкой в ModX?
https://19dx.ru/2016/02/dobavlyaem-uvedomleniya-vidzhetu-kommentariev-vk/
Из него понятен путь. Но тот вариант что описан не работает и куда рыть не понятно.
Описанное здесь на водит на мысль что есть другое решение и возможно более правильное. Беда в том что я совсем не программист. А найти решение очень хочется.
Очень надеюсь, что этот блог живой, и автор хоть изредка, но наведывается сюда, несмотря на то, что ссылки под статьей уже битые :(
Вопрос:
Как с помощью modMail, точнее, modPHPMailer, прописать заголовки типа:
Precedence: bulk
и
List-Unsubscribe: <mailto:list@x.ru>?
Или хотя бы подскажите, куда копать?
Долго тупил, как его использовать, в результате понял, что что-то типа: