दिलचस्प पोस्ट
एंड्रॉइड एनडीके का इस्तेमाल करते हुए एक स्थिर लाइब्रेरी कैसे संकलित करें? क्या यह मोनोचौच जीसी में एक बग है? मैं किसी एप्लिकेशन में फ़ाइलों को कैसे खींच और खींचूँ? हर एन सेकेंड में पाठ दृश्य अपडेट करना है? SetTimeout का न्यूनतम मिलीसेकंड मान क्या है? बटन प्रेस पर UITableView सेल की पंक्ति हो रही है क्लोनिंग और पिप्यूल अपडेट के बाद गिट सबडोम "अलग सिर" स्थिति में है सी ++ कन्स्ट्रक्टर / डिस्ट्रिक्टर इनहेरिटेंस जावा के लिए सामान्य प्रकार पैरामीटर का नामकरण सम्मेलन (एकाधिक वर्णों के साथ)? क्या कोई सी ++ क्लास स्वयं एक विशेषता के रूप में शामिल हो सकता है? प्रमाणपत्र नामांकन प्रक्रिया Fseek का उपयोग करके लाइन के पीछे की ओर एक फ़ाइल पढ़ें _JAVA_OPTIONS JAVA_TOOL_OPTIONS और JAVA_OPTS के बीच का अंतर WxPython के लिए विजेट का साजिश रचने का सबसे अच्छा समय क्या है? कैसे Firebase एंड्रॉइड से सभी बच्चे की सूची प्राप्त करने के लिए

PHPMailer के साथ त्रुटि हैंडलिंग

मैं एक छोटी परियोजना के लिए PHPMailer का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं इस सॉफ़्टवेयर के साथ त्रुटि संभाल के बारे में थोड़ा भ्रमित हूँ। उम्मीद है कि किसी के साथ इसका अनुभव है जब मैंने एक ईमेल सेट अप किया है और मैं इसका उपयोग करता हूं:

$result = $mail->Send(); if(!$result) { // There was an error // Do some error handling things here } else { echo "Email successful"; } 

जो ठीक, अधिक या कम काम करता है समस्या यह है कि जब कोई त्रुटि होती है, तो PHPMailer भी त्रुटि को गूंजते हुए लगता है, इसलिए यदि कोई समस्या है, तो यह केवल उस जानकारी को ब्राउज़र को सीधे भेजता है, अनिवार्य रूप से किसी भी त्रुटि से निपटने को बंद कर रहा है।

क्या इन संदेशों को चुप करने का कोई तरीका है? यह अपवाद नहीं फेंक रहा है, यह सिर्फ त्रुटि को छाप रहा है, जो मेरे परीक्षण के मामले में है:

 invalid address: @invalid@email You must provide at least one recipient email address. 

इसकी एक त्रुटि है, लेकिन इसे $ mail-> ErrorInfo में रहने चाहिए; सॉफ़्टवेयर द्वारा बाहर नहीं किया जा रहा है

Solutions Collecting From Web of "PHPMailer के साथ त्रुटि हैंडलिंग"

PHPMAiler अपवाद का उपयोग करता है निम्नलिखित कोड को अपनाने का प्रयास करें:

 require_once '../class.phpmailer.php'; $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch try { $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->AddAddress('whoto@otherdomain.com', 'John Doe'); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML(file_get_contents('contents.html')); $mail->AddAttachment('images/phpmailer.gif'); // attachment $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment $mail->Send(); echo "Message Sent OK\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } 

बस इसे खुद तय करना था। ऊपर दिए गए उत्तरों को $mail->SMTPDebug = 0; विकल्प। यह तब उपलब्ध नहीं हो सकता जब प्रश्न पहले पूछा गया हो।

यदि आपको अपना कोड PHPMail साइट से मिला है, तो डिफ़ॉल्ट $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPDebug = 2; // enables SMTP debug information (for testing)

https://github.com/Synchro/PHPMailer/blob/master/examples/test_smtp_gmail_advanced.php

त्रुटियों को दबाने के लिए 0 पर मान सेट करें और ऊपर बताए अनुसार आपके कोड के 'कैच' हिस्से को संपादित करें।

कृपया ध्यान दें!!! PHPMailer को इन्स्तांत करते समय आपको निम्न स्वरूप का उपयोग करना चाहिए!

 $mail = new PHPMailer(true); 

यदि आप अपवादों को नजरअंदाज नहीं करते हैं और केवल एक चीज जो आपको मिलती है वह दिनचर्या से प्रतिध्वनि है! मुझे पता है कि इस के बाद अच्छी तरह से बनाया गया था लेकिन उम्मीद है कि यह किसी की मदद करेगा

आप त्रुटि के बारे में अधिक जानकारी पा सकते हैं $mail->ErrorInfo । उदाहरण के लिए:

 if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } 

यह अपवाद मॉडल का एक विकल्प है जिसे आपको new PHPMailer(true) साथ सक्रिय करने की आवश्यकता है। लेकिन अगर अपवाद मॉडल का उपयोग कर सकते हैं, इसका उपयोग @ फिल रिक्फ के उत्तर के रूप में करें।

यह गिटब https://github.com/PHPMailer/PHPMailer पर PHPMailer के मुख्य पृष्ठ से आता है।

हमने एक आवरण वर्ग लिखा है जो बफर को कैप्चर करता है और मुद्रित आउटपुट को एक अपवाद में परिवर्तित करता है। इससे हमें हर बार नवीनीकरण के दौरान प्रतिध्वनि वक्तव्यों को टिप्पणी करने के लिए याद किए बिना phpmailer फ़ाइल को अपग्रेड करने देता है।

आवरण वर्ग के तरीकों के साथ कुछ तरीके हैं:

 public function AddAddress($email, $name = null) { ob_start(); parent::AddAddress($email, $name); $error = ob_get_contents(); ob_end_clean(); if( !empty($error) ) { throw new Exception($error); } } 

यहां तक ​​कि अगर आप अपवादों का उपयोग करते हैं, तो यह अभी भी आउटपुट त्रुटियां
आपको $ MailerDebug को गलत करने के लिए सेट करना होगा, इस तरह दिखना चाहिए

 $mail = new PHPMailer(); $mail->MailerDebug = false; 

यह एक अच्छा काम करता है

 use try { as above use Catch as above but comment out the echo lines } catch (phpmailerException $e) { //echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { //echo $e->getMessage(); //Boring error messages from anything else! } 

फिर इसे जोड़ें

 if ($e) { //enter yor error message or redirect the user } else { //do something else } 

PHPMailer.php में, नीचे दिए गए पंक्तियां हैं:

 echo $e->getMessage() 

बस इन लाइनों पर टिप्पणी करें और आप जाने के लिए अच्छा होगा

 $mail = new PHPMailer(); $mail->AddAddress($email); $mail->From = $from; $mail->Subject = $subject; $mail->Body = $body; if($mail->Send()){ echo 'Email Successfully Sent!'; }else{ echo 'Email Sending Failed!'; } 

ईमेल को सफल या असफल होने को संभालने का सबसे आसान तरीका …