web-dev-qa-db-ja.com

Drupalからの電子メールの送信を停止するにはどうすればよいですか?

Pantheonで開発、ステージング、ライブのサーバーワークフローを設定しています。私のサイトには、さまざまな理由でメンバーに電子メールが送信される多くのルールがあります。開発/ステージングサイトでこれらに取り組む必要がある場合がありますが、ライブデータがあるため、何かに取り組んでいるときにユーザーが追加または重複した電子メールを受信する場合があることに気付きました。

開発/ステージングサーバーですべての電子メール機能をオフにする簡単な方法はありますか(できれば忘れないように自動的にオフにするのが望ましい)。 dev/stagingでカスタムモジュールが有効になっていることを確認するための手順がすでに整っているため、理想的には、カスタムモジュールを介して電子メールを無効にしたいと思います。

22
Patrick Kenny

別のより速いオプションとして、次の行をサイトのsettings.phpファイルに追加できます(Develモジュールがインストールされている場合は、これが開発サイトの場合は必ずそうする必要があります)。

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

これにより、デフォルトのメールシステムがDevelの開発用メールシステムに置き換えられ、メールを受信者に送信するのではなく、ファイルログに書き込みます。デフォルトでは、ファイルはtemporary://devel-mailsですが、別の変数を設定することで変更できます。

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

「そのためのモジュールがあります」リストに別のモジュールを追加するためのメモ:

電子メールの再ルーティング Drupalサイトからのすべての送信電子メールをインターセプトし、事前定義された構成可能な電子メールアドレスに再ルーティングします。

この機能は数行のコードで簡単に実装できることに同意しますが、このモジュールを使用すると、元の受信者であるニースの機能の詳細を含む事前定義されたアドレスへのメールを引き続き受信できます。

11
claire_

または、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'] = ''; 
}
10
lenni

Drupal 8

Drupal 8の場合、構成システムを介してDevelモジュールのメールハンドラーをオンにすることができます。

drushを使用すると、次のようになります。

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

私は通常、この場合 Reroute Email モジュールを使用します。すべてのメールをdevから特定のメールに転送できます。送信されるメールには、このメールの送信先も指定されています。

4
Permana

これは開発なしで機能し、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 に送られます。

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

私は Mail Redirect モジュールがあなたにぴったりだと思います:)別の汚い方法はSMTPモジュールをインストールして間違ったsmtpを設定することです;)

2
arrubiu

そのため、開発、ステージング、本番用の特定のものがある場合は、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;
}
2
Mike Gifford

[〜#〜] smtp [〜#〜]localhostに設定してインストール MailCatcherGitHub )送信されたメッセージをキャッチして、Webインターフェースに表示します。

Installation

  1. gem install mailcatcher
  2. mailcatcher
  3. 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]"
    
  4. http://localhost:1080/に移動

  5. smtp://localhost:1025からメールを送信

Drushでは次のようにできます。

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

Drupal configs、setup MailHog )に触れたくない場合は、アプリケーションから送信されるすべての電子メールをキャッチします。

1
shumushin

Mailsystem モジュールを使用していると仮定して、admin/config/system/mailsystemを選択し、DevelMailLogを選択します。

1
Martin Poulsen