स्थानीय विकास मशीन पर php मेल () फंक्शन दर्दनाक रूप से धीमा होता है


21

पृष्ठभूमि: यदि आपने विकास के उद्देश्यों के लिए एक स्थानीय अपाचे सर्वर स्थापित किया है, तो आप उस समस्या में भाग सकते हैं, जहां ईमेल भेजने में ईमेल भेजने में कम से कम एक मिनट (कम से कम एक मिनट) लगता है। यदि आप अपने द्वारा बनाई गई ईमेल से किसी समस्या को डीबग करने का प्रयास कर रहे हैं तो यह बेहद निराशाजनक है।

इंटरनेट पर कई फ़ोरम पोस्ट हैं जो इस समस्या पर चर्चा करते हैं। हालाँकि, किसी भी विषय ने यह नहीं बताया कि मेरे सीमित ज्ञान के लिए पर्याप्त विवरण में क्या करना है। यहाँ कदम है कि मेरे लिए काम कर रहे हैं:

1) इस आदेश का उपयोग करके अपना होस्टनाम (यदि आप इसे भूल गए हैं) खोजें:

:~$ cat /hosts/hostname

myhostname

2) फ़ाइल को संपादित करें /etc/hostsऔर सुनिश्चित करें कि पहली पंक्ति निम्नलिखित है:

127.0.0.1 localhost.localdomain localhost myhostname

3) Sendmail कॉन्फ़िगरेशन फ़ाइल ( /etc/mail/sendmail.cfउबंटू में ) को संपादित करें और लाइन को अनलॉक करें#O HostsFile=/etc/hosts

4) कंप्यूटर को पुनरारंभ करें। कंप्यूटर को अब बहुत तेजी से बूट करना चाहिए और मेल () फ़ंक्शन लगभग तुरंत वापस आ जाना चाहिए। जब तक आप चरण 5 का पालन नहीं करते, वास्तव में ईमेल नहीं भेजे जाएंगे।

5) मेल फ़ंक्शन का उपयोग करते समय आपको Sendmail '-f' विकल्प का नया उपयोग करना होगा। उदाहरण के लिए:

mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');

मेरे साथी सर्वरफॉल्टर्स के लिए मेरा प्रश्न है:

और क्या परिवर्तन किए जा सकते हैं ताकि मुझे सेंडमेल-एफ विकल्प का उपयोग न करना पड़े? यद्यपि -f विकल्प को जोड़ना बहुत कठिन नहीं है, यह एक समस्या है जब आपका सीएमएस (जैसे कि ड्रुपल) मेल भेजने के दौरान -f विकल्प का उपयोग नहीं करता है। इस विकल्प को जोड़ने के लिए आपको एक कोर मॉड्यूल को हैक करना होगा।


1
मेरे उबंटू सिस्टम पर कमांड हैcat /etc/hostname
zkent

जवाबों:


6

वैसे मुझे पता है कि यह वह नहीं है जो आप पूछ रहे हैं, लेकिन आप पोस्टफिक्स या एक्जिम की कोशिश क्यों नहीं करते? वे दोनों ubuntu के लिए उपलब्ध हैं (पोस्टफिक्स उबंटू सिस्टम पर डिफ़ॉल्ट एमटीए भी है) और वे दोनों एक संगत 'सेंडमेल' कमांड प्रदान करते हैं जो बहुत अच्छी तरह से काम करता है। IMHO Sendmail एक तरह से दिनांकित है और आपको अधिक आधुनिक MTA के साथ समर्थन के बेहतर अवसर मिलेंगे।


भले ही सेंडमेल की तुलना में बेहतर मेल सिस्टम हैं, मुद्दा उत्पादन सर्वर को मिरर करने वाले डेवलपमेंट सर्वर को मेनटेन कर रहा है। Sendmail php के लिए डिफ़ॉल्ट मेल एजेंट है।
माइकल बी

1
आप सॉफ्टवेयर भेजने या बाइनरी भेजने का मतलब है? क्योंकि एक्जिम और पोस्टफिक्स में भी sendmailबाइनरी है जो कम्पैटिबिलिटी मामलों के लिए ऑरिजनल सेंडमेल के समान ऑप्शंस को स्वीकार करता है।
coredump

मैं पिछले अनुभव से एक्ज़िम का बहुत प्रशंसक नहीं हूं, लेकिन पोस्टफ़िक्स को एक कोशिश और हल w / e समस्याएं दीं, जो हम तुरंत कर रहे हैं / Sendmail!
क्विकशिफ्टिन

2

यह मेरे लिए काम किया:

  • पोस्टफ़िक्स स्थापित करें

इसे यहां कैसे करें इस बारे में निर्देश देखें: https://help.ubuntu.com/community/Postfix (यह पहले से ही इंस्टॉल हो सकता है, और 'सेंडमेल' बाइनरी वास्तव में पोस्टफिक्स के लिए एक उपनाम हो सकता है)

  • यहां दिए गए निर्देशों का पालन करें:

http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/

mkfifo /var/spool/postfix/public/pickup

sendmailप्रक्रिया का पता लगाएं

ps aux | grep mail

इसे मार

kill <thepid>

पुनः आरंभ करें postfix

/etc/init.d/postfix restart

मुझे लगता है कि आप 'myorigin' पैरामीटर को किसी भी सक्रिय डोमेन नाम जैसे डोमेन नाम के रूप में सेट कर सकते हैं।


उत्तम! क्या इस एफ़टर ने मुझे दो घंटे तक घेरे रखा। =)
हैन्स

1

यह आपके लिए एक समाधान हो सकता है या नहीं भी हो सकता है: mail.force_extra_parameters = "-fsender@somewhere.com"अपनी php.ini फ़ाइल में जोड़ें । यह PHP के मेल () फ़ंक्शन के पांचवें पैरामीटर के रूप में PHP को स्वचालित रूप से append -fsender@somewhere.com बनाता है ।

यह एक हार्डकोड मूल्य है और केवल php.ini में लागू है, इसलिए यह बहुत लचीला नहीं होगा, लेकिन शायद आपके विकास के मामले में आपके लिए काम करता है?


0

नेटवर्क ट्रैफ़िक (थिंक tcpdump) को देखकर या straceअपने सेंडमेल या अपाचे प्रक्रियाओं को चलाकर , आपको यह अनुमान लगाने में सक्षम होना चाहिए कि उस देरी क्यों होती है ताकि आप रूट समस्या को ठीक कर सकें।

आमतौर पर उस सीमा में देरी DNS लुकअप को विफल करने के कारण होती है, लेकिन आपको तब तक पता नहीं चलेगा जब तक आप नहीं देखते। जब तक आप अंतर्निहित समस्या को ठीक नहीं करते हैं, तब तक यह संभवत: एक मुद्दा होगा चाहे आप इसके आसपास काम करने की कोशिश करें।


1
होस्टनाम द्वारा FQDN (पूरी तरह से योग्य डोमेन नाम) के बजाय एकल शब्द होने के कारण देरी हो रही थी। Sendmail को / etc / मेजबानों को इंगित करने और पहले डोमेन नाम (जो कि एक FQDN है) के रूप में localhost.domain होने में कोई देरी नहीं है। यह चरण 1-4 में तय किया गया था। शेष समस्या '-f' का उपयोग करने की है - फिर भी मेल भेजने के लिए 2 मिनट प्रतीक्षा करने पर एक बड़ा सुधार।
माइकल बी

0

मुझे PHP में मेल () का उपयोग करने में कोई समस्या नहीं आई है जो MTA पर एक समस्या का परिणाम नहीं था।

आपकी php.ini फ़ाइल में यह दिखाया जाएगा कि ईमेल भेजने के लिए कौन सी कमांड चलती है (डिफ़ॉल्ट: "sendmail -t -i")। कमांड लाइन से इसका उपयोग करके एक ईमेल भेजने की कोशिश करें - मैं इसकी धीमी शर्त लगाता हूं।

यह जाँचने के लिए सामान्य चीजें हैं कि क्या एक DNS सर्वर को मशीन पर सही ढंग से कॉन्फ़िगर किया गया है (और एमटीए में कॉन्फ़िगर किए गए सभी पते को हल कर सकते हैं) और यह कि यदि कोई स्मार्ट रिले कॉन्फ़िगर किया गया है, तो नाम एक पते के लिए resolvable है जिसे सिस्टम कनेक्ट कर सकता है।

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