Drupal이 어떤 종류의 이메일도 보내지 못하게하려면 어떻게해야합니까?


21

Pantheon에서 개발, 준비 및 라이브 서버 워크 플로를 설정했습니다. 내 사이트에는 여러 가지 이유로 회원에게 전자 메일을 발송하는 규칙이 많이 있습니다. 때로는 개발 / 스테이징 사이트에서 이러한 작업을 수행해야하지만 라이브 데이터가 있기 때문에 사용자가 무언가를 작업 할 때 추가 또는 중복 전자 메일을받는 경우가 있다는 것을 깨달았습니다.

개발자 / 스테이징 서버에서 모든 전자 메일 기능을 해제하는 것이 쉬운 방법이 있습니까? 이상적으로는 사용자 지정 모듈을 통해 전자 메일을 사용하지 않도록 설정하고 싶습니다. 개발자 / 스테이징에서 사용자 지정 모듈을 사용하도록 설정하는 단계가 이미 있기 때문입니다.


2
여기에 대한 답변 중 어느 것도 만족스럽지 않습니다. settings.php를 변경하면 프로덕션 환경으로 전환됩니다. 테스트 및 개발에 모듈을 설치하면 Live에서 복제 할 때 모듈을 덮어 씁니다. 몇 가지 제안 된 코드 변경-심각합니까? settings.local.php는 작동하지만 언급되지 않았습니다. 로컬 개발 사이트에 하나가 있지만 Git 워크 플로를 사용하면 파일을 가져 오거나 업데이트하기 전에 SFTP로 전환해야하기 때문에 Pantheon 환경에는 실용적이지 않습니다. 아쉽게도 무고한 프로덕션 사용자는 때때로 테스트에서 이메일을 계속받습니다.
cdonner

3
@ cdonner 예, 진심으로. 성공한 문제를 해결할 수있는 방법은 여러 가지가 있으며 모두 매우 간단합니다. 개인적으로 git update-index --assume-unchanged sites/default/settings.phpsettings.php가 다른 환경에서 밀리지 않도록합니다. 어떤 사람들은 환경 설정을 확인하고 환경에 따라 다른 conf 파일을 포함하는 조건부 논리를 선호합니다 (모든 언어로 존재하는 다른 모든 웹 프레임 워크). 여기에서 유일한 한계는 상상력입니다. 기본 PHP / git이므로 답에 추가 할 필요가 없습니다
Clive

1
당신의 의견을 존중합니다, Clive. 그러나 여기에 문제가 있습니다. 한 팀원이 체크인하기 전에 변경되지 않은 git 전화를하는 것을 잊어 버린 경우 많은 수의 사용자가 테스트 환경에서 많은 수의 전자 메일을 수신 할 수있는 큰 사이트가있는 경우 책임이있는 사람은 원하지 않습니다. 당신의 방법에 의존합니다.
cdonner

1
수정을 선택하면 sites/default/settings.php대신 수행하십시오 git update-index --skip-worktree sites/default/settings.php. 으로 --assume-unchanged, 당신은 당신이 할 경우 settings.php의 변경 사항을 잃게됩니다 git reset --hard. stackoverflow.com/questions/13630849/…

설정 .php를 .gitignore에 넣을 수도 없습니까?
Evan Donovan

답변:


38

더 빠른 또 다른 옵션으로, 다음 줄을 사이트의 settings.php 파일에 추가 할 수 있습니다 (Devel 모듈이 설치되어있는 경우 개발자 사이트 인 경우 확실합니다).

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

기본 메일 시스템이 Devel의 개발 메일 시스템으로 바뀌어 이메일을 수신자에게 보내지 않고 파일 로그에 씁니다. 기본적으로 파일은에 저장 temporary://devel-mails되지만 다른 변수를 설정하여 변경할 수 있습니다 (예 :

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

11

"해당 모듈이 있습니다"목록에 다른 모듈을 추가하기 만하면됩니다.

이메일 라우팅은 Drupal 사이트에서 보내는 모든 이메일을 가로 채서 미리 정의 된 구성 가능한 이메일 주소로 다시 라우팅합니다.

이 기능은 몇 줄의 코드로 쉽게 구현할 수 있지만이 모듈을 사용하면 원래 수신자에 대한 세부 정보, 멋진 기능성 imho와 함께 미리 정의 된 주소로 이메일을 계속받을 수 있습니다.


3
또한 이메일을 다시 라우팅하면 settings.php 파일에 코드를 넣어 호스트 이름 (또는 사용하려는 if () 문)에 따라 설정을 활성화 / 비활성화 / 변경할 수 있으므로 프로덕션에서 자동으로 끄고 켤 수 있습니다 다른 기계.
diamondsea

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'] = ''; 
}

3
이것은 본질적으로 모든 메일 리디렉션이 수행합니다. 완전히 새로운 모듈을 포함하는 것
보다이

좋은 생각은 아닙니다. 이것은 당신이 그것을 잊었을 때 prod 환경으로 몰래 들어가는 코드 유형입니다 git commit ..
Duncanmoo

5

드루팔 8

Drupal 8의 경우 구성 시스템을 통해 Devel 모듈 메일 핸들러를 켤 수 있습니다.

로에게 drush이 될 것이다 :

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

2
다음과 같이 환경별로 환경을 설정할 수도 있습니다 settings.local.php. $config['system.mail']['interface']['default'] = 'devel_mail_log';
Patrick Kenny

log dir을 지정하려면 $config['devel.settings']['debug_mail_directory'] = 'temporary://my-directory';입니다.
leymannx

4

나는 보통 이 경우 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 로 이동 하십시오 .


이는 액세스 우회 취약점 일 수 있습니다. 예를 들어 패스 재설정 이메일에서 해시 패스 및 재설정 링크가 워치 독으로 전송됩니다.
awolfey

2

Mail Redirect 모듈이 당신에게 완벽 하다고 생각 합니다 :) 또 다른 더러운 방법은 SMTP 모듈을 설치하고 잘못된 SMTP를 설정하는 것입니다.)


이 모듈을 사용하면서도 메일 기능을 테스트 할 수 있습니까?
GoodSp33d

예, 시스템이 선택된 이메일 주소로 이메일을 전송하기 때문에
arrubiu


2

따라서 개발, 스테이징 및 프로덕션에 대한 특정 항목이 있으면 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'] = "example@example.com";
  // Enable inserting a message into the email body when the mail is being
  // rerouted.
  $conf['reroute_email_enable_message'] = 1;
}


1

셋업하여 SMTPlocalhost설치 MailCatcher ( GitHub의를 ) 웹 인터페이스에 표시가 보낸 모든 메시지를 잡는다.

설치

  1. gem install mailcatcher
  2. mailcatcher
  3. sendmail_pathPHP에서 다음을 구성하십시오 .

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

    또는 Apache 구성에서 :

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

  5. 를 통해 메일 보내기 smtp://localhost:1025

Drush에서는 다음과 같이 할 수 있습니다.

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

1

Drupal 구성을 터치하지 않으려면 서버에서 MailHog 를 설정 하여 응용 프로그램에서 나오는 모든 전자 메일을 수신하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.