個人の連絡フォームでは、誰かが自分自身をccすると、電子メールを送信しているユーザーのユーザー名が公開されます。多くのユーザーは実際にフルネームをユーザー名として入力するので、匿名のままにするために、ユーザー名が他のユーザーに公開されないようにします。
このような場合に送信される電子メールは、 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は、受信者に送信されるメッセージと同じです。
hook_mail_alter(&$message)
でメールをカスタマイズできます。