web-dev-qa-db-ja.com

送信するメールにBCCを設定するにはどうすればよいですか?

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;
  }
}
4
shivak

君の 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;
  }
}
5
Clive

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;
  }
}

お役に立てれば。

0
Akhila V Nair