Пример кода, который создаёт форму для загрузки файла с последующей его отправкой на ящик 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).
Написанное актуально для
Drupal 7
Похожие записи
- Навесить на элемент managed_file свой ajax callback (Как обновить всю форму при загрузки файла в managed_file)
- Отключить автоматический аплоад файлов у определённого поля
- Использование виджета AJAX загрузки файлов в своих формах
- Уведомление пользователя об удалении его материала с указанием причины
- Необязательное поле загрузки файлов
Комментарии
Спасибо Вам.
Очень доступно обьяснили.
Автор молодец. Обьясняет доступно.
Статтья помогла. Спасибо.
Не могу понять, почему модуль 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 все доступно
Добавить комментарий