Как я могу включать фотографии пользователей в уведомления по электронной почте, отправляемые модулем privatemsg?
У меня есть модуль личных сообщений, настроенный для отправки уведомлений, когда пользователи получают личное сообщение. У меня настроен и работает модуль Mime Mail; личные сообщения отправляются в формате HTML и отображаются правильно. Тем не менее, я не смог найти способ включить изображения пользователей в сообщения.
На моем сайте у меня есть поле, содержащее изображение пользователя (я не использую стандартные изображения пользователей, встроенные в Drupal). Тем не менее, у меня есть переопределил шаблон изображений пользователей, чтобы отобразить это поле, поэтому решение, которое работает для изображений пользователей, должно, надеюсь, работать и в моем случае.
Я попытался решить эту проблему с помощью токенов.
Модуль токенов предоставляет следующий токен: [privatemsg_message:author:field_acc_profile_picture]
Однако, когда я включаю этот токен в сообщение, он просто возвращается в виде текстовой строки; замена не выполняется.
Я думал, что это можно сделать с помощью PHP, но, насколько я могу судить, включить PHP невозможно в поле сообщение об уведомлении по электронной почте.
Итак, как я могу включать фотографии пользователей в уведомления по электронной почте, отправляемые модулем privatemsg?
1 answers
Один из способов, которым вы могли бы это сделать (что я и делаю на нескольких сайтах), - реализовать hook_privatemsg_message_insert()
в пользовательском модуле. Отключите электронные письма модуля privatemsg или любые электронные письма, созданные по правилам, и вместо этого напишите пользовательский фрагмент кода, который отправляет личное сообщение.
В моем случае мне нужно было выполнить несколько других настроек, но в самом простом случае вы можете получить URL-адрес изображения профиля, загрузив учетную запись пользователя $из $message->author->uid.
Краткий пример:
<?php
/**
* Implements hook_privatemsg_message_insert().
*/
function custom_privatemsg_message_insert($message) {
global $base_url;
// Get the account from which message was sent.
$account_from = user_load($message->author->uid);
// Get the person to whom the message is being sent (I only handle one).
foreach ($message->recipients as $key => $recipient) {
$account_to = $recipient;
continue;
}
// Set up variables for our message body.
$variables = array(
'from' => $account_from->realname,
'link' => l('Click here to view/reply to this message', $base_url . '/messages/view/' . $message->thread_id, array('external' => TRUE)),
'message' => check_markup($message->body, $message->format),
);
// Print the message body using a custom theme function. Because email clients
// require obnoxious markup, it's best to use a theme function or template...
$body = theme('custom_private_message', $variables);
$body_plain = strip_tags($body);
$subject = t('New Private Message: ') . $message->subject;
$email_to = $account_to;
$email_from = $account_from->realname . ' <' . $account_from->mail . '>';
// Now, use whatever mechanism you want to send the actual email.
}
?>