web-dev-qa-db-ja.com

個人の連絡フォームからユーザー名を削除する

個人の連絡フォームでは、誰かが自分自身をccすると、電子メールを送信しているユーザーのユーザー名が公開されます。多くのユーザーは実際にフルネームをユーザー名として入力するので、匿名のままにするために、ユーザー名が他のユーザーに公開されないようにします。

1

このような場合に送信される電子メールは、 contact_mail() によって設定されます。これは、Contactモジュールから実行されるhook_mail()実装であり、次のコードが含まれています。

  switch ($key) {
    case 'page_mail':
    case 'page_copy':
      $message['subject'] .= t('[!category] !subject', $variables, array('langcode' => $language->language));
      $message['body'][] = t("!sender-name (!sender-url) sent a message using the contact form at !form-url.", $variables, array('langcode' => $language->language));
      $message['body'][] = $params['message'];
      break;

    case 'page_autoreply':
      $message['subject'] .= t('[!category] !subject', $variables, array('langcode' => $language->language));
      $message['body'][] = $params['category']['reply'];
      break;

    case 'user_mail':
    case 'user_copy':
      $variables += array(
        '!recipient-name' => format_username($params['recipient']), 
        '!recipient-edit-url' => url('user/' . $params['recipient']->uid . '/edit', array('absolute' => TRUE, 'language' => $language)),
      );
      $message['subject'] .= t('[!site-name] !subject', $variables, array('langcode' => $language->language));
      $message['body'][] = t('Hello !recipient-name,', $variables, array('langcode' => $language->language));
      $message['body'][] = t("!sender-name (!sender-url) has sent you a message via your contact form (!form-url) at !site-name.", $variables, array('langcode' => $language->language));
      $message['body'][] = t("If you don't want to receive such e-mails, you can change your settings at !recipient-edit-url.", $variables, array('langcode' => $language->language));
      $message['body'][] = t('Message:', array(), array('langcode' => $language->language));
      $message['body'][] = $params['message'];
      break;
  }

contact_personal_form_submit() に示されているように、誰かが別のユーザーに連絡したときに送信される電子メールのメッセージ識別子は「user_mail」です。

次のコードのようなものを使用して hook_mail_alter() を実装すると、必要なタスクを実行できます。

function mymodule_mail_alter(&$message) {
  switch ($message['key']) {
    case 'user_mail':
    case 'user_copy':
      $language = $message['language'];
      $message['body'] = array();
      $params = $message['params'];
      $variables = array(
        '!site-name' => variable_get('site_name', 'Drupal'), 
        '!subject' => $params['subject'], 
        '!recipient-name' => format_username($params['recipient']), 
        '!recipient-edit-url' => url('user/' . $params['recipient']->uid . '/edit', array('absolute' => TRUE, 'language' => $language)),
        '!form-url' => url($_GET['q'], array('absolute' => TRUE, 'language' => $language)), 
        '!sender-name' => format_username($params['sender']), 
        '!sender-url' => $params['sender']->uid ? url('user/' . $params['sender']->uid, array('absolute' => TRUE, 'language' => $language)) : $params['sender']->mail,
        '!recipient-name' => format_username($params['recipient']), 
      );

      $message['subject'] .= t('[!site-name] !subject', $variables, array('langcode' => $language->language));
      $message['body'][] = t('Hello !recipient-name,', $variables, array('langcode' => $language->language));
      $message['body'][] = t("A user (!sender-url) has sent you a message via your contact form (!form-url) at !site-name.", $variables, array('langcode' => $language->language));
      $message['body'][] = t("If you don't want to receive such e-mails, you can change your settings at !recipient-edit-url.", $variables, array('langcode' => $language->language));
      $message['body'][] = t('Message:', array(), array('langcode' => $language->language));
      $message['body'][] = $params['message'];
      break;
  }
}

keyと等しいuser_replyでメッセージを変更しました。これはメッセージです。メッセージを送信したユーザーに返されます。このようにして、送信者に返されるCCは、受信者に送信されるメッセージと同じです。

1
kiamlaluno

hook_mail_alter(&$message) でメールをカスタマイズできます。

1
tommyent