web-dev-qa-db-fra.com

Comment puis-je empêcher Drupal d'envoyer des e-mails de toute nature?

J'ai un flux de travail de développement, de mise en scène et de serveur en direct installé sur Pantheon. Mon site comporte de nombreuses règles qui obligent les membres à être envoyés par courrier électronique pour diverses raisons. J'ai parfois besoin de travailler dessus sur mes sites de développement/staging mais j'ai réalisé que, comme ils ont les données en direct, les utilisateurs recevront parfois des e-mails supplémentaires ou en double lorsque je travaille sur quelque chose.

Existe-t-il un moyen simple de désactiver toutes les fonctionnalités de messagerie (de préférence automatiquement pour m'empêcher d'oublier) sur un serveur de développement/de transfert? Idéalement, j'aimerais désactiver le courrier électronique via un module personnalisé, car j'ai déjà des étapes en place pour m'assurer qu'un module personnalisé est activé sur dev/staging.

22
Patrick Kenny

Comme autre option, plus rapide, vous pouvez ajouter les lignes suivantes au fichier settings.php de votre site (si vous avez installé le module Devel, ce que vous devriez certainement faire s'il s'agit d'un site de développement).

$conf['mail_system'] = array(
  'default-system' => 'DevelMailLog',
);

Cela remplacera le système de messagerie par défaut par le système de messagerie de développement de Devel, qui écrit les e-mails dans un journal de fichiers plutôt que de les envoyer à un destinataire. Par défaut, les fichiers sont stockés dans temporary://devel-mails, mais vous pouvez modifier cela en définissant une autre variable, par exemple.

$conf['devel_debug_mail_directory'] = '/path/to/folder';
38
Clive

Juste une note pour ajouter un autre module à la liste "Il y a un module pour ça":

Rediriger l'e-mail intercepte tous les e-mails sortants d'un site Drupal et les redirige vers une adresse e-mail configurable prédéfinie.

Je suis d'accord que cette fonctionnalité peut facilement être implémentée avec quelques lignes de code, mais en utilisant ce module, vous pouvez continuer à recevoir des e-mails à une adresse prédéfinie, avec des détails sur le destinataire d'origine, Nice Functionalality imho.

11
claire_

Ou vous pouvez utiliser hook_mail_alter pour rediriger ou empêcher les courriers drupal:

/**
* Implements hook_mail_alter
*/
function yourmodule_mail_alter(&$message) {
  // set 'To' field to nothing, so Drupal won’t have any address
  $message['to'] = ''; 
}
10
lenni

Drupal 8

Pour Drupal 8, vous pouvez activer le gestionnaire de messagerie du module Devel via le système de configuration.

Avec drush ce serait:

drush -y pm-enable devel
drush -y config-set system.mail interface.default devel_mail_log
5
Erik Schwartz

J'utilise habituellement le module Reroute Email pour ce cas. Il peut rediriger tous les e-mails du développeur vers certains e-mails. L'e-mail envoyé spécifie également où cet e-mail doit être envoyé.

4
Permana

Cela fonctionnera sans développement et est sûr dans les trois environnements.

Ajoutez ceci dans settings.php. Copiez-le et changez l'environnement en test pour Test.

// Stop email on dev.
if (isset($_SERVER['PANTHEON_ENVIRONMENT']) &&
  $_SERVER['PANTHEON_ENVIRONMENT'] === 'dev') {
  // @see MYMODULE_mail_alter().
  $conf['development_environment'] = TRUE;
}

Puis en mymodule:

function MYMODULE_mail_alter(&$message) {
  if(variable_get('development_environment', FALSE)) {
    // First: Prevent the mail from being sent.
    $message['send'] = FALSE;

    // Next: Log the mail so it can be debugged if necessary
    watchdog('Development Env', 'The following email was not sent: !message', array('!message' => '<pre>' . print_r($message, TRUE) . '</pre>'));
  }
}

Le crédit pour l'idée de modification du courrier va à http://www.jaypan.com/tutorial/preventing-emails-being-sent-drupal-7-development-environment .

3
awolfey

https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_mail_alter/7

<?php
/**
 * Implements hook_mail_alter().
 */
function mymodule_mail_alter(&$message) {
  $message['send'] = FALSE; 
}
2
Coder1

Je pense que le module Mail Redirect est parfait pour vous :) Une autre façon sale est d'installer le module SMTP et de définir un mauvais smtp;)

2
arrubiu

Vous pouvez donc mettre cela dans votre settings.php ou settings.local.php si vous en avez des spécifiques pour le développement, la mise en scène et la production.

if(module_exists('devel')) {
  // Use Devel's maillog
  $conf['mail_system'] = array( 
    'default-system' => 'DevelMailLog',
  );
  // To set custom path 
  // $conf['devel_debug_mail_directory'] = '/path/to/folder';
} 
elseif (module_exists('mail_redirect')) {
  // Enable email rerouting.
  $conf['reroute_email_enable'] = 1;
  // Space, comma, or semicolon-delimited list of email addresses to pass
  // through. Every destination email address which is not on this list will be  
  // rerouted to the first address on the list.
  $conf['reroute_email_address'] = "[email protected]";
  // Enable inserting a message into the email body when the mail is being
  // rerouted.
  $conf['reroute_email_enable_message'] = 1;
}
2
Mike Gifford

Configurez votre SMTP sur localhost et installez MailCatcher ( GitHub ) qui intercepte tout message qui lui est envoyé pour l'afficher dans une interface Web.

Installation

  1. gem install mailcatcher
  2. mailcatcher
  3. Configurez votre sendmail_path in PHP to:

    sendmail_path = /usr/bin/env catchmail -f [email protected]
    

    ou dans configuration Apache :

    php_admin_value sendmail_path "/usr/bin/env catchmail -f [email protected]"
    
  4. Aller à http://localhost:1080/

  5. Envoyer du courrier via smtp://localhost:1025

Dans Drush, vous pouvez faire comme:

php -d sendmail_path="$(which catchmail)" drush.php some-command
1
kenorb

si vous ne voulez pas toucher Drupal configs, configurez MailHog sur votre serveur pour récupérer tous les e-mails sortant de votre application.

1
shumushin

En supposant que vous utilisez le module Mailsystem , allez simplement à admin/config/system/mailsystem et sélectionnez DevelMailLog.

1
Martin Poulsen