Drupal'ın herhangi bir türde e-posta göndermesini nasıl durdurabilirim?


21

Pantheon'da kurulmuş bir geliştirici, evreleme ve canlı sunucu iş akışım var. Sitemin, üyelerin çeşitli nedenlerle e-posta ile gönderilmesine neden olan birçok kural var. Bazen dev / sahneleme sitelerim üzerinde çalışmam gerekiyor, ancak canlı verilere sahip oldukları için bazen bir şey üzerinde çalışırken kullanıcıların ek veya yinelenen e-postalar alacağını fark ettim.

Bir geliştirme / hazırlama sunucusunda tüm e-posta gönderme özelliğini (tercihen otomatik olarak unutmamı önlemek için) kapatmanın kolay bir yolu var mı? İdeal olarak, dev / evrelemede özel bir modülün etkinleştirildiğinden emin olmak için zaten adımlarım olduğundan, özel bir modül aracılığıyla e-postayı devre dışı bırakmak istiyorum.


2
Buradaki cevapların hiçbiri tatmin edici değil. Settings.php dosyasının değiştirilmesi, bunun üretime aktarılacağı anlamına gelir. Test ve Dev'e bir modül kurmak, Live'dan klonladığınızda üzerine yazılacağı anlamına gelir. Önerilen bazı kod değişiklikleri - ciddi mi? Bir settings.local.php işe yaradı, ancak bahsedilmedi. Yerel geliştirme sitesinde bir tane var, ancak Git iş akışı ile bu Pantheon ortamları için pratik değil çünkü dosyayı oraya veya güncellemeleri yapmadan önce SFTP'ye geçmem gerekiyor. Ne yazık ki, masum üretim kullanıcıları zaman zaman testten e-posta almaya devam edecekler.
cdonner

3
@cdonner Evet, cidden. Hepsi çok basit olan, başardığınız nakavt sorununu çözmenin birçok yolu vardır. Şahsen git update-index --assume-unchanged sites/default/settings.phpsettings.php dosyasının farklı ortamlara itilmesini engellemek için kullanıyorum . Bazı insanlar, ortam ayarlarını kontrol eden ve ortama dayalı farklı conf dosyaları içeren bazı koşullu mantığı tercih ederler (mevcut herhangi bir web çerçevesinin hemen hemen her dilde). Buradaki tek sınır kişinin hayal gücüdür, temel PHP / git şeyleridir, cevaplara eklenmesine gerek yoktur
Clive

1
Fikrinize saygı duyuyorum Clive. Sorun burada. Eğer bir ekip üyesi check-in işleminden önce varsayarak değişmeden git çağrısı yapmayı unutursa, çok sayıda kullanıcının test ortamından çok sayıda e-posta alabileceği büyük bir siteniz varsa, bundan sorumlu kişi olarak istemem yönteminize güvenmek için.
cdonner

1
Değiştirmeyi seçerseniz sites/default/settings.php, bunun yerine yapın git update-index --skip-worktree sites/default/settings.php. İle --assume-unchanged, settings.php dosyasında yaptığınız değişiklikleri kaybedersiniz git reset --hard. Bkz. Stackoverflow.com/questions/13630849/…

Settings.php dosyasını .gitignore'nuza da koyamaz mısınız?
Evan Donovan

Yanıtlar:


38

Başka, daha hızlı bir seçenek olarak, sitenizin settings.php dosyasına aşağıdaki satırları ekleyebilirsiniz (Devel modülü yüklüyse, bu bir dev sitesi ise kesinlikle gerekir).

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

Bu, varsayılan posta sisteminin yerine, e-postaları bir alıcıya göndermek yerine bir dosya günlüğüne yazan Devel'in geliştirme posta sistemi ile değiştirilir. Varsayılan olarak dosyalar depolanır temporary://devel-mails, ancak başka bir değişken, ör.

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

11

"Bunun için bir modül var" listesine başka bir modül eklemek için bir not:

E-postayı yeniden yönlendir, bir Drupal sitesinden giden tüm e-postaları engeller ve bunları önceden tanımlanmış yapılandırılabilir bir e-posta adresine yeniden yönlendirir.

Bu işlevin birkaç kod satırı ile kolayca uygulanabileceğini kabul ediyorum, ancak bu modülü kullanarak, önceden tanımlanmış bir adrese e-postalar almaya devam edebilirsiniz, orijinal alıcıyla ilgili ayrıntılar, güzel işlevsellik imho.


3
E-postayı yeniden yönlendir, ayrıca ana makine adınıza (veya kullanmak istediğiniz herhangi bir () ifadesine) bakmak için ayarları etkinleştirmek / devre dışı bırakmak / değiştirmek için settings.php dosyanıza kod koymanıza olanak tanır; başka bir makine.
diamondsea

10

Veya drupal postaları yönlendirmek veya önlemek için hook_mail_alter kullanabilirsiniz:

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

3
Bu aslında tüm Mail Redirect'in yaptığıdır; Muhtemelen bu birkaç satırı yazmak için tamamen yeni bir modül eklemekten daha iyidir
Clive

İyi bir fikir değil, bu, onu ve git commit .benzeri bir şeyi unuttuğunuzda eşya ortamınıza gizlenen kod türüdür .
Duncanmoo

5

Drupal 8

Drupal 8 için, Devel modülü posta işleyicisini yapılandırma sistemi üzerinden açabilirsiniz.

Bununla drusholurdu:

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

2
Bunu ortam başına şu şekilde de ayarlayabilirsiniz settings.local.php: $config['system.mail']['interface']['default'] = 'devel_mail_log';
Patrick Kenny

O zaman log dir belirtmek için $config['devel.settings']['debug_mail_directory'] = 'temporary://my-directory';.
leymannx

4

Bu durumda genellikle E-postayı Yeniden Yönlendir modülünü kullanırım . Tüm e-postaları geliştiriciden belirli e-postalara yönlendirebilir. Gönderilen e-posta ayrıca bu e-postanın nereye gönderileceğini de belirtir.


3

Bu, devel olmadan çalışır ve her üç ortamda da güvenlidir.

Bunu settings.php dosyasına ekleyin. Kopyalayın ve testTest için ortamı değiştirin .

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

Sonra mymodule'de:

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>'));
  }
}

Posta değiştirme fikri için kredi http://www.jaypan.com/tutorial/preventing-emails-being-sent-drupal-7-development-environment adresine gider .


Bunun bir erişim atlama güvenlik açığı olabileceğini unutmayın. Geçiş sıfırlama e-postasında, karma geçiş ve sıfırlama bağlantısı bir örnek için bekçi köpeğine gönderilecektir.
awolfey

2

Ben düşünüyorum Posta Yönlendirme modülü sizin için idealdir :) Başka kirli yolu SMTP modülü yüklemek ve yanlış smtp set olduğu;)


Bu modülü kullanabilir ve yine de Posta işlevini test edebilir miyim?
GoodSp33d

Evet, çünkü sistem seçilen e-posta adresine e-posta gönderir
arrubiu


2

Bu yüzden, dev, evreleme ve prodüksiyon için belirli olanlarınız varsa, settings.php veya settings.local.php dosyasına koyabilirsiniz.

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'] = "example@example.com";
  // Enable inserting a message into the email body when the mail is being
  // rerouted.
  $conf['reroute_email_enable_message'] = 1;
}


1

Set-up SMTP için localhostve yüklemek MailCatcher ( GitHub ) bir web arayüzündeki ekrana kendisine gönderilen herhangi bir iletiyi yakalar.

Kurulum

  1. gem install mailcatcher
  2. mailcatcher
  3. sendmail_pathPHP'de aşağıdakileri yapmak için yapılandırın :

    sendmail_path = /usr/bin/env catchmail -f some@from.address

    veya Apache yapılandırmasında :

    php_admin_value sendmail_path "/usr/bin/env catchmail -f some@from.address"
  4. Adresine git http://localhost:1080/

  5. Üzerinden posta gönder smtp://localhost:1025

Drush'ta şunları yapabilirsiniz:

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.