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.
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';
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.
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'] = '';
}
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
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é.
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 .
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;
}
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;)
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;
}
Configurez votre SMTP sur localhost
et installez MailCatcher ( GitHub ) qui intercepte tout message qui lui est envoyé pour l'afficher dans une interface Web.
gem install mailcatcher
mailcatcher
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]"
Aller à http://localhost:1080/
smtp://localhost:1025
Dans Drush, vous pouvez faire comme:
php -d sendmail_path="$(which catchmail)" drush.php some-command
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.
En supposant que vous utilisez le module Mailsystem , allez simplement à admin/config/system/mailsystem
et sélectionnez DevelMailLog
.