Отправка письма на 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
public function attach($file,$name = '',$encoding = 'base64',$type = 'application/octet-stream') { parent :: attach($file); $this->mailer->AddAttachment($file,$name,$encoding,$type); }Долго не мог понять как же получить $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
$modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('myEmailTemplate', array( 'email' => 'user@example.com', 'name' => 'User Name' ) ));$modx->mail->address('to', 'mail@site.ru'); $modx->mail->address('to', 'second@site.ru'); $modx->mail->address('to', 'third@site.ru');Но если сервер обычный, то столько писем отправить за раз не получится. Тем более, вряд ли почтовые службы не заметят такой большой рассылки — скорее всего письма начнут удаляться спам-фильтрами. Лучше использовать для рассылок специальные сервисы — люди за это не зря деньги берут.
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:
{'!sendEmailImagePath' | snippet} <img src="cid:{$product.id}">Как в функцию embedImage через сниппет sendEmailImagePathпередать
{$site_url}{$product.thumb} //Путь к изображению. {$product.id} // ИдентификаторСпасибоНашел единственный пост по теме, только автор не указал — как решил задачку.
Решение — по аналогии с function attach (несколькими постами выше)
Помогите аргументы в функцию передать.
Спасибо
PS Для «чистого» PHP — есть решение, не могу под MODX+miniShop2 адаптировать.
Вы разобрались с сервисом MODX modMail.
Чтобы внедрить изображения в тело письма (не аттачем) нужно указать
Как это сделать?
Спасибо
У нас появилась задача отравить письмо данным методом, но отложить отправку на 3 часа. Может Вам приходилось сталкиваться с отложенной отправкой в ModX?
Очень надеюсь, что этот блог живой, и автор хоть изредка, но наведывается сюда, несмотря на то, что ссылки под статьей уже битые :(
Вопрос:
Как с помощью modMail, точнее, modPHPMailer, прописать заголовки типа:
Precedence: bulk
и
List-Unsubscribe: <mailto:list@x.ru>?
Или хотя бы подскажите, куда копать?
Долго тупил, как его использовать, в результате понял, что что-то типа:
$modx->mail->Header("Нужный заголовок");