मैं ड्रुपल को किसी भी तरह के ई-मेल भेजने से कैसे रोक सकता हूं?


21

मेरे पास एक देव है, मंचन, और लाइव सर्वर वर्कफ़्लो को पैन्थियन पर स्थापित किया गया है। मेरी साइट में बहुत सारे नियम हैं जिनके कारण सदस्यों को विभिन्न कारणों से ई-मेल किया जाता है। मुझे कभी-कभी अपने देव / मंचन स्थलों पर इन पर काम करने की आवश्यकता होती है, लेकिन मैंने महसूस किया है कि, क्योंकि उनके पास लाइव डेटा है, कभी-कभी उपयोगकर्ताओं को अतिरिक्त या डुप्लिकेट ई-मेल प्राप्त होंगे जब मैं किसी चीज़ पर काम कर रहा होता हूं।

क्या ई-मेलिंग सर्वर पर ई-मेलिंग क्षमता को बंद करने का कोई आसान तरीका है (अधिमानतः मुझे भूलने से रोकने के लिए स्वचालित रूप से)? आदर्श रूप से, मैं एक कस्टम मॉड्यूल के माध्यम से ई-मेल को अक्षम करना चाहूंगा, क्योंकि मेरे पास पहले से ही यह सुनिश्चित करने के लिए कदम हैं कि कस्टम मॉड्यूल देव / मंचन पर सक्षम है।


2
यहां कोई भी उत्तर संतोषजनक नहीं है। सेटिंग्स को बदलना। एफपी का मतलब है कि यह उत्पादन में धकेल दिया जाएगा। टेस्ट और देव में मॉड्यूल स्थापित करने का मतलब है कि जब आप लाइव से क्लोन करेंगे तो यह ओवरराइट हो जाएगा। कुछ सुझाए गए कोड परिवर्तन - गंभीरता से? सेटिंग .local.php काम करेगा लेकिन उल्लेख नहीं किया गया था। मेरे पास स्थानीय विकास साइट में एक है, लेकिन एक गिट वर्कफ़्लो के साथ यह पैन्थियोन वातावरण के लिए व्यावहारिक नहीं है क्योंकि मुझे फ़ाइल को प्राप्त करने या अपडेट करने से पहले मुझे एसएफटीपी पर स्विच करना होगा। तो, अफसोस, निर्दोष उत्पादन उपयोगकर्ता कभी-कभार परीक्षण से ईमेल प्राप्त करना जारी रखेंगे।
cdonner

3
@ एलसीडीरनर हां, गंभीरता से। ऐसे कई तरीके हैं जिनसे आप दस्तक के मुद्दे को हल कर सकते हैं, जिसके लिए आप बहुत सरल हैं। व्यक्तिगत रूप से मैं git update-index --assume-unchanged sites/default/settings.phpसेटिंग्स का उपयोग करने के लिए उपयोग करता हूं । विभिन्न वातावरणों के आसपास धकेलने से। कुछ लोग कुछ सशर्त तर्क पसंद करते हैं, जिन्होंने पर्यावरण सेटिंग्स की जाँच की और पर्यावरण के आधार पर अलग-अलग गोपनीय फाइलें शामिल हैं (किसी भी भाषा में अस्तित्व में एक ला बहुत अधिक हर दूसरे वेब फ्रेमवर्क)। केवल सीमा यहाँ एक कल्पना है, यह बुनियादी PHP / Git सामान है, जवाब में जोड़े जाने की जरूरत नहीं है
क्लाइव

1
मैं आपकी राय का सम्मान करता हूं, क्लाइव। यहाँ समस्या है, यद्यपि। यदि आपके पास एक बड़ी साइट है जहां बड़ी संख्या में उपयोगकर्ता परीक्षण वातावरण से बड़ी संख्या में ईमेल प्राप्त कर सकते हैं, अगर एक टीम का सदस्य चेक-इन करने से पहले धारणा-अपरिवर्तित गिट कॉल करना भूल जाता है, तो मैं इसके लिए जिम्मेदार व्यक्ति नहीं चाहता हूं। अपनी विधि पर भरोसा करने के लिए।
cdonner

1
यदि आप संशोधित करना चुनते हैं sites/default/settings.php, तो इसके बजाय करें git update-index --skip-worktree sites/default/settings.php। के साथ --assume-unchanged, आप सेटिंग में किए गए परिवर्तनों को खो देते हैं। यदि आप ए करते हैं git reset --hard। देखें stackoverflow.com/questions/13630849/...

आप भी अपने .itignore में settings.php नहीं डाल सकते थे?
इवान डोनोवन

जवाबों:


38

एक और, तेज, विकल्प के रूप में, आप अपनी साइट की सेटिंग में निम्न पंक्तियाँ जोड़ सकते हैं। एफपी फ़ाइल (यदि आपके पास डेवेल मॉड्यूल स्थापित है, जो आपको निश्चित रूप से चाहिए अगर यह एक देव साइट है)।

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

यह डिफ़ॉल्ट मेल सिस्टम को डेवेल के डेवलपमेंट मेल सिस्टम से बदल देगा, जो ईमेल भेजने वाले को ईमेल भेजने के बजाय ईमेल लिखता है। डिफ़ॉल्ट रूप से फ़ाइलों को संग्रहीत किया जाता है temporary://devel-mails, लेकिन आप इसे दूसरे चर को सेट करके बदल सकते हैं, जैसे।

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

11

"सूची के लिए एक मॉड्यूल है" सूची में एक और मॉड्यूल जोड़ने के लिए बस एक नोट:

Reroute ईमेल एक Drupal साइट से सभी आउटगोइंग ईमेल को इंटरसेप्ट करता है और उन्हें पूर्वनिर्धारित कॉन्फ़िगरेशन ईमेल पते पर पुनः प्रसारित करता है।

मैं इस बात से सहमत हूं कि कोड की कुछ पंक्तियों के साथ इस फ़ंक्शननालिटी को आसानी से लागू किया जा सकता है, लेकिन इस मॉड्यूल का उपयोग करके, आप पूर्वनिर्धारित एड्रेस को ईमेल प्राप्त करना जारी रख सकते हैं, मूल प्राप्तकर्ता के विवरण के साथ, अच्छा फ़ंक्शन आइलोहो।


3
Reroute ईमेल आपको अपने hostname के आधार पर सेटिंग्स को बदलने / अक्षम / बदलने में सक्षम बनाता है (या जो भी अगर () स्टेटमेंट आप उपयोग करना चाहते हैं), तो आप इसे स्वचालित रूप से उत्पादन और चालू चालू कर सकते हैं कोई अन्य मशीन।
हीरा

10

या आप drupal मेल को पुनर्निर्देशित करने या रोकने के लिए hook_mail_alter का उपयोग कर सकते हैं:

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

3
यह अनिवार्य रूप से सभी मेल रीडायरेक्ट करता है; शायद बेहतर बस इन कुछ पंक्तियों को लिखने के लिए की तुलना में एक पूरी नई मॉड्यूल शामिल करने के लिए
क्लाइव

एक अच्छा विचार नहीं है, यह एक प्रकार का कोड है जो आपके ठंढे वातावरण में झलकता है जब आप इसके बारे में भूल जाते हैं और git commit .ऐसा ही कुछ।
डंकनमो

5

द्रुपाल al

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';
पैट्रिक केनी

लॉग डायर को निर्दिष्ट करने के लिए तो यह है $config['devel.settings']['debug_mail_directory'] = 'temporary://my-directory';
लीमैनक्स

4

मैं आमतौर पर इस मामले के लिए Reroute ईमेल मॉड्यूल का उपयोग करता हूं । यह देव से लेकर निश्चित ईमेल तक सभी ईमेल को पुन: प्रकाशित कर सकता है। भेजा गया ईमेल यह भी बताता है कि यह ईमेल कहाँ भेजा जाना चाहिए।


3

यह बिना काम के होगा और तीनों वातावरणों में सुरक्षित रहेगा।

सेटिंग्स में इसे जोड़ें। एफपी। इसे कॉपी करें और testटेस्ट के लिए पर्यावरण को बदलें ।

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

फिर म्यमोडुले में:

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 को जाता है ।


ध्यान दें कि यह एक पहुँच बायपास भेद्यता हो सकती है। एक पास रीसेट ईमेल पर हैशड पास और रीसेट लिंक वॉचडॉग के लिए भेजा जाएगा, एक उदाहरण के लिए।
1

2

मुझे लगता है कि मेल रीडायरेक्ट मॉड्यूल आपके लिए एकदम सही है :) एक और गंदा तरीका एसएमटीपी मॉड्यूल स्थापित किया गया है और एक गलत एसएमएस सेट है;)


क्या इस मॉड्यूल का उपयोग करना संभव है और अभी भी मेल कार्यक्षमता का परीक्षण करने में सक्षम है?
GoodSp33d

हां, क्योंकि सिस्टम चुने हुए ईमेल पते पर ईमेल भेजता है
अर्नबियू

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

स्वीकृत उत्तर की तुलना में यह एक बेहतर उपाय है। यह मेल को पूरी तरह से भेजे जाने से रोकता है, इसके बजाय केवल एक डमी पते पर फिर से भेजने के लिए जिसे अभी भी एक मेल भेजने का प्रयास करना पड़ता है।
ब्रायन जिंके ने

2

तो अगर आप देव, मंचन और उत्पादन के लिए विशिष्ट हैं, तो आप इसे अपनी सेटिंग में डाल सकते हैं।

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

सेट-अप अपने एसएमटीपी के लिए localhostऔर स्थापित MailCatcher ( GitHub ) जो किसी भी संदेश एक वेब इंटरफेस में प्रदर्शित करने के लिए यह करने के लिए भेजा फैल जाती है।

स्थापना

  1. gem install mailcatcher
  2. mailcatcher
  3. sendmail_pathPHP में अपने को कॉन्फ़िगर करें :

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

    या अपाचे विन्यास में :

    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 config , सेटअप MailHog को अपने सर्वर पर स्पर्श नहीं करना चाहते हैं, तो अपने एप्लिकेशन से आने वाले सभी ई-मेल को पकड़ने के लिए।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.