web-dev-qa-db-fra.com

Comment définir BCC dans l'e-mail que j'envoie?

J'utilise Drupal 8. Comment puis-je ajouter le champ BCC dans la fonction de messagerie.

L'utilisation du code ci-dessous Bcc ne fonctionne pas

$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);

code de la fonction hook_mail:

function mymodule_mail($key, &$message, $params) {
  switch ($key) {
    case 'test_email_form':
      $message['headers']['Bcc'] = $params['Bcc'];
      break;
  }
}
4
shivak

Votre hook_mail la mise en œuvre doit définir l'objet/le corps de l'e-mail à envoyer; $params est juste passé pour le contexte.

Compte tenu de votre premier extrait, cela devrait fonctionner:

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

Dans Drupal 8, vous pouvez utiliser le service de gestion de messagerie pour appeler le hook_mail (), vous devez utiliser n'importe quel serveur de messagerie pour la même chose (exemple: système de messagerie, swiftmailer), donc vous devez d'abord pour définir les variables et les invoquer, puis ajouter les paramètres nécessaires au message électronique à l'aide de hook_mail. Les codes suivants utilisés pour appeler le courrier électronique,


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

Ensuite, dans votre hook_mail, vous pouvez utiliser la valeur de clé pour identifier le message électronique et d'autres paramètres pour le courrier,


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

J'espère que cela t'aides.

0
Akhila V Nair