Как я могу включать фотографии пользователей в уведомления по электронной почте, отправляемые модулем privatemsg?


У меня есть модуль личных сообщений, настроенный для отправки уведомлений, когда пользователи получают личное сообщение. У меня настроен и работает модуль Mime Mail; личные сообщения отправляются в формате HTML и отображаются правильно. Тем не менее, я не смог найти способ включить изображения пользователей в сообщения.

На моем сайте у меня есть поле, содержащее изображение пользователя (я не использую стандартные изображения пользователей, встроенные в Drupal). Тем не менее, у меня есть переопределил шаблон изображений пользователей, чтобы отобразить это поле, поэтому решение, которое работает для изображений пользователей, должно, надеюсь, работать и в моем случае.

Я попытался решить эту проблему с помощью токенов.

Модуль токенов предоставляет следующий токен: [privatemsg_message:author:field_acc_profile_picture]

Однако, когда я включаю этот токен в сообщение, он просто возвращается в виде текстовой строки; замена не выполняется.

Я думал, что это можно сделать с помощью PHP, но, насколько я могу судить, включить PHP невозможно в поле сообщение об уведомлении по электронной почте.

Итак, как я могу включать фотографии пользователей в уведомления по электронной почте, отправляемые модулем privatemsg?

Author: Patrick Kenny, 2012-05-20

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.
}
?>
 2
Author: geerlingguy, 2012-05-26 02:00:12