Pantheonで開発、ステージング、ライブのサーバーワークフローを設定しています。私のサイトには、さまざまな理由でメンバーに電子メールが送信される多くのルールがあります。開発/ステージングサイトでこれらに取り組む必要がある場合がありますが、ライブデータがあるため、何かに取り組んでいるときにユーザーが追加または重複した電子メールを受信する場合があることに気付きました。
開発/ステージングサーバーですべての電子メール機能をオフにする簡単な方法はありますか(できれば忘れないように自動的にオフにするのが望ましい)。 dev/stagingでカスタムモジュールが有効になっていることを確認するための手順がすでに整っているため、理想的には、カスタムモジュールを介して電子メールを無効にしたいと思います。
別のより速いオプションとして、次の行をサイトのsettings.phpファイルに追加できます(Develモジュールがインストールされている場合は、これが開発サイトの場合は必ずそうする必要があります)。
$conf['mail_system'] = array(
'default-system' => 'DevelMailLog',
);
これにより、デフォルトのメールシステムがDevelの開発用メールシステムに置き換えられ、メールを受信者に送信するのではなく、ファイルログに書き込みます。デフォルトでは、ファイルはtemporary://devel-mails
ですが、別の変数を設定することで変更できます。
$conf['devel_debug_mail_directory'] = '/path/to/folder';
「そのためのモジュールがあります」リストに別のモジュールを追加するためのメモ:
電子メールの再ルーティング Drupalサイトからのすべての送信電子メールをインターセプトし、事前定義された構成可能な電子メールアドレスに再ルーティングします。
この機能は数行のコードで簡単に実装できることに同意しますが、このモジュールを使用すると、元の受信者であるニースの機能の詳細を含む事前定義されたアドレスへのメールを引き続き受信できます。
または、hook_mail_alterを使用して、drupalメールをリダイレクトまたは防止します。
/**
* Implements hook_mail_alter
*/
function yourmodule_mail_alter(&$message) {
// set 'To' field to nothing, so Drupal won’t have any address
$message['to'] = '';
}
Drupal 8の場合、構成システムを介してDevelモジュールのメールハンドラーをオンにすることができます。
drush
を使用すると、次のようになります。
drush -y pm-enable devel
drush -y config-set system.mail interface.default devel_mail_log
私は通常、この場合 Reroute Email モジュールを使用します。すべてのメールをdevから特定のメールに転送できます。送信されるメールには、このメールの送信先も指定されています。
これは開発なしで機能し、3つの環境すべてで安全です。
これをsettings.phpに追加します。それをコピーして、テストのために環境をtest
に変更します。
// Stop email on dev.
if (isset($_SERVER['PANTHEON_ENVIRONMENT']) &&
$_SERVER['PANTHEON_ENVIRONMENT'] === 'dev') {
// @see MYMODULE_mail_alter().
$conf['development_environment'] = TRUE;
}
次に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>'));
}
}
メール変更アイデアのクレジットは 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;
}
私は Mail Redirect モジュールがあなたにぴったりだと思います:)別の汚い方法はSMTPモジュールをインストールして間違ったsmtpを設定することです;)
そのため、開発、ステージング、本番用の特定のものがある場合は、settings.phpまたはsettings.local.phpにこれを配置できます。
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;
}
[〜#〜] smtp [〜#〜] をlocalhost
に設定してインストール MailCatcher ( GitHub )送信されたメッセージをキャッチして、Webインターフェースに表示します。
gem install mailcatcher
mailcatcher
PHP=でsendmail_path
を設定して:
sendmail_path = /usr/bin/env catchmail -f [email protected]
または Apache設定 :
php_admin_value sendmail_path "/usr/bin/env catchmail -f [email protected]"
http://localhost:1080/
に移動
smtp://localhost:1025
からメールを送信Drushでは次のようにできます。
php -d sendmail_path="$(which catchmail)" drush.php some-command
Drupal configs、setup MailHog )に触れたくない場合は、アプリケーションから送信されるすべての電子メールをキャッチします。
Mailsystem モジュールを使用していると仮定して、admin/config/system/mailsystem
を選択し、DevelMailLog
を選択します。