Как я могу запретить Drupal отправлять электронные письма любого типа?

У меня есть рабочий процесс dev, staging и live server, настроенный на Pantheon. На моем сайте есть много правил, которые заставляют пользователей отправлять по электронной почте по различным причинам. Мне иногда приходится работать над этим на своих сайтах dev /staging, но я понял, что, поскольку у них есть данные в реальном времени, иногда пользователи получат дополнительные или повторяющиеся электронные письма, когда я что-то работаю.

Есть ли какой-либо простой способ отключить все возможности электронной рассылки (желательно автоматически, чтобы я не забыл забыть) на сервере dev /staging? В идеале я хотел бы отключить электронную почту через специальный модуль, так как у меня уже есть шаги для того, чтобы убедиться, что пользовательский модуль включен в dev /staging.

19 голосов | спросил Patrick Kenny 27 J000000Friday12 2012, 10:57:07

13 ответов


33

В качестве еще одного, более быстрого варианта, вы можете добавить следующие строки в файл settings.php вашего сайта (если у вас установлен модуль Devel, который вам обязательно нужен, если это сайт dev).

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

Это заменит почтовую систему по умолчанию на почтовую систему разработки Devel, которая пишет письма в файл-файл, а не отправляет их получателю. По умолчанию файлы хранятся в temporary://devel-mails, но вы можете изменить это, установив другую переменную, например.

$conf['devel_debug_mail_directory'] = '/path/to/folder';
ответил Clive 22 Jpm1000000pmTue, 22 Jan 2013 15:05:53 +040013 2013, 15:05:53
10

Или вы можете использовать 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'] = ''; 
}
ответил lenni 27 J000000Friday12 2012, 12:08:58
10

Просто заметьте, чтобы добавить еще один модуль в список «Есть модуль для этого»:

  

Повторная электронная почта перехватывает все исходящие письма с сайта Drupal и перенаправляет их на предопределенный настраиваемый адрес электронной почты.

Я согласен с тем, что эта функциональная функция может быть легко реализована с несколькими строками кода, но с использованием этого модуля вы можете продолжать получать электронные письма по предопределенному адресу, с подробной информацией об исходном получателе, хорошей функциональной функцией imho.

ответил bsfoo116 22 Jpm1000000pmTue, 22 Jan 2013 16:22:59 +040013 2013, 16:22:59
4

Обычно я использую модуль перенаправления электронной почты для этого случая. Он может перенаправить всю электронную почту от разработчика на определенную электронную почту. В отправленном письме также указывается, куда следует отправить это письмо.

ответил Permana 26 FebruaryEurope/MoscowbThu, 26 Feb 2015 04:20:33 +0300000000amThu, 26 Feb 2015 04:20:33 +030015 2015, 04:20:33
4

Для Drupal 8 вы можете включить обработчик почты модуля devel через конфигурационную систему.

С drush это будет:

drush pm-enable -y devel
drush config-set system.mail interface.default devel_mail_log
ответил Erik Schwartz 3 FebruaryEurope/MoscowbWed, 03 Feb 2016 19:29:11 +0300000000pmWed, 03 Feb 2016 19:29:11 +030016 2016, 19:29:11
2

Я думаю, что модуль Mail Redirect идеально подходит для вас :) Другой грязный способ - установить SMTP-модуль и установить неверный smtp;)

ответил arrubiu 27 J000000Friday12 2012, 11:18:03
2

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; 
}
ответил Coder1 5 22013vEurope/Moscow11bEurope/MoscowTue, 05 Nov 2013 12:45:46 +0400 2013, 12:45:46
2

Итак, вы можете поместить это в свои settings.php или settings.local.php, если у вас есть специальные для dev, staging & производство.

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;
}
ответил Mike Gifford 17 MarpmMon, 17 Mar 2014 17:47:54 +04002014-03-17T17:47:54+04:0005 2014, 17:47:54
2

Это будет работать без разработки и будет безопасным во всех трех средах.

Добавьте это в 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 .

ответил awolfey 25 Jam1000000amMon, 25 Jan 2016 04:24:39 +030016 2016, 04:24:39
1

Предполагая, что вы используете модуль Mailsystem , просто перейдите в admin/config/system/mailsystem и выберите DevelMailLog.

ответил Martin Poulsen 22 Jpm1000000pmTue, 22 Jan 2013 15:24:19 +040013 2013, 15:24:19
1

Настройте SMTP на localhost и установите MailCatcher ( GitHub ), который улавливает любое сообщение, отправленное ему для отображения в веб-интерфейсе.

Установка

  1. gem install mailcatcher
  2. mailcatcher
  3. Настройте свой sendmail_path в PHP на:

    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
ответил kenorb 30 +03002015-10-30T16:39:20+03:00312015bEurope/MoscowFri, 30 Oct 2015 16:39:20 +0300 2015, 16:39:20
1

, если вы не хотите прикасаться к конфигурациям Drupal, установите MailHog на свой сервер, чтобы поймать все e -маги, выходящие из вашего приложения.

ответил shumushin 3 FebruaryEurope/MoscowbWed, 03 Feb 2016 20:49:41 +0300000000pmWed, 03 Feb 2016 20:49:41 +030016 2016, 20:49:41
-1

Включите поддержку SMTP-аутентификации , и вы можете отключить свой SMTP-почтовый сервер с помощью admin/config/system/smtp.

ответил Armaan 30 +03002015-10-30T15:46:34+03:00312015bEurope/MoscowFri, 30 Oct 2015 15:46:34 +0300 2015, 15:46:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132