Drupal 8.を使用しています。8.メール関数にBCCフィールドを追加するにはどうすればよいですか。
以下のコードを使用してBCCが機能しない
$params['body'] = 'test body';
$params['subject'] = 'test subject';
$params['Bcc'] = '[email protected]';
$message = \Drupal::service('plugin.manager.mail')->mail('test', 'test_email_form', $to, $langcode, $params, $from);
hook_mail関数コード:
function mymodule_mail($key, &$message, $params) {
switch ($key) {
case 'test_email_form':
$message['headers']['Bcc'] = $params['Bcc'];
break;
}
}
君の hook_mail
実装では、送信するメールの件名/本文を設定する必要があります。 $params
は単にコンテキストに渡されます。
最初のスニペットを考えると、これはうまくいくはずです:
function mymodule_mail($key, &$message, $params) {
switch ($key) {
case 'test_email_form':
$message['headers']['Bcc'] = $params['Bcc'];
$message['subject'] = $params['subject'];
$message['body'][] = $params['body'];
break;
}
}
Drupal 8では、メールマネージャーサービスを使用してhook_mail()を呼び出すことができます。同じようにメールサーバーも使用する必要があります(例:mailsystem、swiftmailer)。そのため、最初に変数を定義してそれを呼び出し、次に、hook_mailを使用してメールメッセージに必要なパラメーターを追加します。メールの呼び出しに使用される次のコード、
$reciever_email = '[email protected]';
// The language code.
$langcode = 'en';
// Key for hook_mail.
$key = 'mykey';
// Your module name.
$module_name = 'mymodule';
$reply = NULL;
$send = TRUE;
$params = array(
'subject' => $subject,
'body' => $body,
);
// Send mail.
$mail_manager = \Drupal::service('plugin.manager.mail');
$result = $mail_manager->mail($module_name, $key, $reciever_email, $langcode, $params, $reply, TRUE);
if ($result['result'] != TRUE) {
$message = t('There was a problem sending your email notification to @email.', array('@email' => $reciever_email));
drupal_set_message($message, 'error');
\Drupal::logger('mail-log')->error($message);
}
else {
$message = t('An email notification has been sent to @email.', ['@email' => $user_email]);
drupal_set_message($message);
\Drupal::logger('mail-log')->notice($message);
}
次に、hook_mailでキー値を使用して、メールメッセージとメールの他の設定を識別できます。
YOUR_MODULE_NAME_mail($key, &$message, $params) {
$options = array(
'langcode' => $message['langcode'],
);
// Specify the headers if necessary.
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed; delsp=yes';
// Create cases for different kinds of mails.
switch ($key) {
case 'mykey':
$email_id = '[email protected]';
$valid = \Drupal::service('email.validator')->isValid($email_id);
if ($valid == TRUE) {
$message['from'] = $email_id;
}
else {
$message = t('Invalid email-id is given in from address.');
drupal_set_message($message, 'error');
}
$bcc_mail = '[email protected]';
$valid_bcc = \Drupal::service('email.validator')->isValid($bcc_mail);
if ($valid_bcc == TRUE) {
$message['headers']['bcc'] = $bcc_mail;
}
$message['subject'] = t('@title', array('@title' => $params['subject']), $options);
$message['body'][] = $params['body'];
break;
}
}
お役に立てれば。