Drupal → Отправить e-mail с вложением (аттачем)
Пример кода, который создаёт форму для загрузки файла с последующей его отправкой на ящик to@example.com
:
/** * Form builder. */ function mymodule_send_form($form, $form_state) { $form['attachment'] = array( '#type' => 'file', '#title' => 'Attachment', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Send', ); return $form; } /** * Validate callback. */ function mymodule_send_form_validate($form, &$form_state) { if ($file = file_save_upload('attachment', array(), 'public://')) { $form_state['values']['attachment'] = $file; } else { form_set_error('file', 'File not uploaded.'); } } /** * Submit callback. */ function mymodule_send_form_submit($form, &$form_state) { drupal_mail( 'mymodule', 'send_attachment', 'to@example.com', language_default(), array( 'attachments' => array($form_state['values']['attachment']) ) ); } /** * Implements hook_mail(). */ function mymodule_mail($key, &$message, $params) { if ($key == 'send_attachment') { $message['subject'] = 'Mail with attachment'; $message['body'][] = 'Body...'; } }
Для работы потребуются модули Mime Mail и Mail System.
Для версий Mime Mail 7.x-1.0-beta3 и выше, необходимо убедится, что на странице admin/config/system/mailsystem
опция Класс интерфейса MailSystemInterface имеет значение MimeMailSystem (скриншот).
Если файлы будут отправляться не из public://
, то дополнительно необходимо дать ролям право на отправку файлов не из публичной директории (название пермишена — Send arbitrary files).
Комментарии
Спасибо Вам.
Очень доступно обьяснили.
Автор молодец. Обьясняет доступно.
Статтья помогла. Спасибо.
Не могу понять, почему модуль Mime Mail игнорирует настройки модуля SMTP и отправляет через хостера, а не через тот сервер, который указан в настройках модуля SMTP. Делал по инструкции drupal.org/node/1200142
Разобрался.
Класс интерфейса: SmtpMailSystem
Mime Mail модуль class: MimeMailSystem_SmtpMailSystem
SMTP Authentication Support модуль class: MimeMailSystem_SmtpMailSystem
Только вот с webform это не работает. Если пустить webform минуя модуль SMTP, то файлы аттачатся, а если через модуль SMTP, то файлы не аттачатся.
а у меня почему то не оьрабатываются токены в теле письма кто в курсе в чем дело?
формат письма ставил и php код и full html все равно не берет.
А при просмотре ноды письма отображает верно (
Спасибо за пост. А как в mymodule_mail передать свои параметры? drupal_mail у меня вызывается совсем в другом месте, никаких форм я не использую
Нашел. Оказалось плохо смотрел, в $params все доступно
Оставить комментарий