2011-06-19 15 views
14

सीआई ईमेल भेजें() फ़ंक्शन केवल सत्य या गलत लौटाता है। एक भेजने का असफल होने के कारण एक और विस्तृत कारण प्राप्त करने का कोई तरीका है? मैं एसएमटीपी का उपयोग कर रहा हूँ।कोडनिर्देशक ईमेल त्रुटि हैंडलिंग

+0

क्या आप [बिल्ड-इन सीआई त्रुटि हैंडलिंग रूटीन और सेटिंग्स] का उपयोग कर रहे हैं (http://codeigniter.com/user_guide/general/errors.html)? – hakre

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/5777352/error-when-sending-smtp-email-with-google-and-codeigniter – hakre

+0

यदि यह उत्पादन में है, तो मैं आमतौर पर सभी त्रुटि लॉगिंग बंद कर देता हूं। क्या सीआई त्रुटि लॉगिंग फ़ंक्शंस को अभी भी काम करेगा यदि मैं त्रुटि रिपोर्टिंग को किसी को भी सेट करता हूं? – samxli

उत्तर

0

आप अपने मेल लॉग देख सकते हैं। यदि मेल त्रुटियां खत्म हो जाती हैं तो आपके पास रिकॉर्ड होना चाहिए कि वहां क्यों है।

मुझे यकीन नहीं है कि वे कहां स्थित होंगे, हालांकि यह आपके सिस्टम पर निर्भर करता है।

+0

सीआई ईमेल कक्षा के साथ आप ईमेल लॉग कैसे सेट अप करते हैं? – samxli

12

आप आगे निरीक्षण कर सकते हैं क्या ईमेल डिबगर का उपयोग करके हुआ:

$r = $this->send(); 
if (!$r) 
    $this->email->print_debugger() 
    ; 

Codeigniter Email Class Reference से।

आप एक स्ट्रिंग के रूप डिबगर उत्पादन की जरूरत है, तो आप सिर्फ उत्पादन एक output buffer साथ पकड़ कर सकते हैं:

$errors = array(); 
... # Loop 
$r = $this->send(); 
if (!$r) { 
    ob_start(); 
    $this->email->print_debugger(); 
    $error = ob_end_clean(); 
    $errors[] = $error; 
} 
... # Loop end 
+0

मुझे एक स्ट्रिंग में डीबगर आउटपुट की आवश्यकता है क्योंकि मैं त्रुटियों को फ्रंट एंड (जेसन के माध्यम से) में वापस कर रहा हूं। ऐसा करने का कोई तरीका? – samxli

+0

मैंने आपको यह दिखाने के लिए उत्तर संपादित किया है कि आप एक चर के लिए डीबगर आउटपुट को कैसे असाइन कर सकते हैं। – hakre

+0

मेरे पास बड़े पैमाने पर ईमेल भेजने के लिए एक लूप में प्रेषण() है। अगर ईमेल सफल है, तो मैंने जेसन में सफलता संदेश दिया। यदि विफल हो गया है, तो मैं ob_end_clean() का उपयोग कर सकता हूं लेकिन इसका उपयोग करने के दुष्प्रभाव हैं क्योंकि यह एक लूप में होगा? – samxli

8

print_debugger() समारोह काम करेगा लेकिन यह तल पर ई-मेल शीर्ष लेख और संदेश जोड़ देता है। यदि आप केवल इतना चाहते हैं डिबग संदेश (जो दोनों सफलता और त्रुटि संदेश शामिल) की एक सरणी है, तो आप ईमेल वर्ग की कार्यक्षमता बढ़ाने के रूप में इस पर विचार कर सकते:

<?php 

class MY_Email extends CI_Email 
{ 

    public function clear_debugger_messages() 
    { 
    $this->_debug_msg = array(); 
    } 

    public function get_debugger_messages() 
    { 
    return $this->_debug_msg; 
    } 
} 

तुम एक में इस जगह करना चाहते हैं आपके ./application/libraries फ़ोल्डर में MY_Email.php नाम की फ़ाइल। कोडइग्निटर स्वचालित रूप से इस वर्ग के अस्तित्व को पहचान लेगा और इसे इसके डिफ़ॉल्ट के बजाय उपयोग करेगा।

आप डिबग संदेशों की सूची (सरणी) प्राप्त करना चाहते हैं, तो आप ऐसा कर सकते हैं:

$this->email->get_debugger_messages(); 

आप संदेश के माध्यम से पाशन कर रहे हैं और पिछले प्रयास से डिबगर संदेशों को शामिल नहीं करना चाहते हैं , तो आप ऐसा कर सकते हैं:

foreach ($email_addresses as $email_address) 
{ 
    $this->email->to($emai_address); 

    if (! $this->email->send()) 
    { 
    echo 'Failed'; 

    // Loop through the debugger messages. 
    foreach ($this->email->get_debugger_messages() as $debugger_message) 
     echo $debugger_message; 

    // Remove the debugger messages as they're not necessary for the next attempt. 
    $this->email->clear_debugger_messages(); 
    } 
    else 
    echo 'Sent'; 
} 

संदर्भ: "विस्तार मूल निवासी पुस्तकालय" http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html की धारा।

+0

यह अच्छा है। साझा करने के लिए धन्यवाद। – hakre

+0

यह समाधान बहुत उपयुक्त दिखता है क्योंकि मैं पहले ही ईमेल क्लास के बिट्स ओवरराइड कर रहा हूं। मै उसे करने की एक कोशिश तो करूंगा! – samxli

+0

@ सैमक्सली - मैंने अपना उदाहरण अपडेट किया है, अगर आप ई-मेल पते के माध्यम से लूपिंग के प्रयासों के बीच में डीबगर संदेशों को साफ़ करना चाहते हैं। मैंने एक 'clear_debugger_messages' फ़ंक्शन जोड़ा है और एक विस्तृत उदाहरण प्रदान किया है। यदि आप सभी प्रयासों को पूरा करने के बाद सभी डीबगर संदेशों को प्राप्त करना चाहते हैं, तो बस उन्हें साफ़ न करें और आपको अंत में एक पूर्ण सरणी मिल जाएगी। –

संबंधित मुद्दे