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