PHP मेल फ़ंक्शन ई-मेल भेजना पूरा नहीं करता है

Jul 09 2014
<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com';
    $to = '[email protected]';
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) {
            echo '<p>Your message has been sent!</p>';
        } else {
            echo '<p>Something went wrong, go back and try again!</p>';
        }
    }
?>

मैंने एक साधारण मेल फ़ॉर्म बनाने की कोशिश की है। फ़ॉर्म स्वयं मेरे index.htmlपेज पर है, लेकिन यह एक अलग "आपके सबमिशन के लिए धन्यवाद" पृष्ठ पर सबमिट करता है thankyou.php, जहां उपरोक्त PHP कोड एम्बेडेड है। कोड पूरी तरह से प्रस्तुत करता है, लेकिन कभी भी ईमेल नहीं भेजता है। मैं इसे कैसे ठीक करूं?

जवाब

533 JohnConde Jul 09 2014 at 09:21

यद्यपि इस उत्तर के कुछ भाग हैं जो केवल mail()फ़ंक्शन के उपयोग पर ही लागू होते हैं , इनमें से कई समस्या निवारण चरणों को किसी भी PHP मेलिंग सिस्टम पर लागू किया जा सकता है।

आपकी स्क्रिप्ट ईमेल न भेजने के कई कारण हैं। जब तक एक स्पष्ट वाक्यविन्यास त्रुटि न हो, इन चीजों का निदान करना मुश्किल है। एक के बिना आपको किसी भी संभावित नुकसान को खोजने के लिए नीचे दी गई चेकलिस्ट के माध्यम से चलने की आवश्यकता है।

सुनिश्चित करें कि त्रुटि रिपोर्टिंग सक्षम है और सभी त्रुटियों की रिपोर्ट करने के लिए सेट है

त्रुटि रिपोर्टिंग आपके कोड में बग्स को रूट करने के लिए आवश्यक है और सामान्य त्रुटियां जो PHP का सामना करती हैं। इन त्रुटियों को प्राप्त करने के लिए त्रुटि रिपोर्टिंग को सक्षम करने की आवश्यकता है। अपनी PHP फ़ाइलों के शीर्ष पर (या एक मास्टर कॉन्फ़िगरेशन फ़ाइल में) निम्न कोड रखने से त्रुटि रिपोर्टिंग सक्षम हो जाएगी।

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

देखें कि मुझे PHP में उपयोगी त्रुटि संदेश कैसे मिल सकते हैं? - इस पर अधिक विवरण के लिए यह उत्तर

सुनिश्चित करें कि mail()फ़ंक्शन कहा जाता है

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

सुनिश्चित करें कि mail()फ़ंक्शन सही ढंग से कहा जाता है

बूल मेल (स्ट्रिंग $ to, स्ट्रिंग $ विषय, स्ट्रिंग $ संदेश [, स्ट्रिंग $ extra_headers [, string $ extra_parameters]])

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

यदि आपके कॉल mail()में सही क्रम में सही पैरामीटर नहीं हैं, तो यह भी विफल हो जाएगा।

सर्वर के मेल लॉग की जाँच करें

आपके वेब सर्वर को इसके माध्यम से ईमेल भेजने के सभी प्रयासों को लॉग करना चाहिए। इन लॉग का स्थान अलग-अलग होगा (आपको अपने सर्वर व्यवस्थापक से पूछने की आवश्यकता हो सकती है कि वे कहाँ स्थित हैं) लेकिन वे आमतौर पर किसी उपयोगकर्ता डेटा स्रोत में पाए जा सकते हैं logs। आपके द्वारा ईमेल भेजने के आपके प्रयासों से संबंधित सर्वर, यदि कोई हो, रिपोर्ट की गई त्रुटि संदेश होंगे।

पोर्ट कनेक्शन विफलता के लिए जाँच करें

पोर्ट ब्लॉक एक बहुत ही आम समस्या है जो ज्यादातर डेवलपर्स एसएमटीपी का उपयोग करके ईमेल वितरित करने के लिए अपने कोड को एकीकृत करते समय सामना करते हैं। और, यह आसानी से सर्वर maillogs पर पता लगाया जा सकता है (मेल लॉग के सर्वर का स्थान सर्वर से सर्वर तक भिन्न हो सकता है, जैसा कि ऊपर बताया गया है)। यदि आप साझा होस्टिंग सर्वर पर हैं, तो पोर्ट 25 और 587 डिफ़ॉल्ट रूप से अवरुद्ध रहते हैं। यह ब्लॉक जानबूझकर आपके होस्टिंग प्रदाता द्वारा किया गया है। यह कुछ समर्पित सर्वरों के लिए भी सही है। जब ये पोर्ट अवरुद्ध हो जाते हैं, तो पोर्ट 2525 का उपयोग करके कनेक्ट करने का प्रयास करें। यदि आप पाते हैं कि पोर्ट भी अवरुद्ध है, तो इन पोर्ट को अनब्लॉक करने के लिए अपने होस्टिंग प्रदाता से संपर्क करना ही एकमात्र उपाय है।

अधिकांश होस्टिंग प्रदाता अपने नेटवर्क को किसी भी स्पैम ईमेल को भेजने से बचाने के लिए इन ईमेल पोर्ट को ब्लॉक कर देते हैं।

सादे / टीएलएस कनेक्शन के लिए पोर्ट 25 या 587 का उपयोग करें और एसएसएल कनेक्शन के लिए 465 पोर्ट। अधिकांश उपयोगकर्ताओं के लिए, कुछ होस्टिंग प्रदाताओं द्वारा निर्धारित दर सीमाओं से बचने के लिए पोर्ट 587 का उपयोग करने का सुझाव दिया गया है।

त्रुटि दमन ऑपरेटर का उपयोग न करें

जब त्रुटि दमन ऑपरेटर @ PHP में एक अभिव्यक्ति के लिए प्रस्तुत किया जाता है, तो उस अभिव्यक्ति द्वारा उत्पन्न किए जा सकने वाले किसी भी त्रुटि संदेश को अनदेखा किया जाएगा। ऐसी परिस्थितियां हैं जहां इस ऑपरेटर का उपयोग करना आवश्यक है लेकिन मेल भेजना उनमें से एक नहीं है।

यदि आपका कोड शामिल है, @mail(...)तो आप महत्वपूर्ण त्रुटि संदेश छिपा सकते हैं जो आपको यह डीबग करने में मदद करेगा। निकालें @और देखें कि क्या कोई त्रुटि बताई गई है।

यह तभी उचित है जब आप ठोस विफलताओं के लिए सही जाँच करेंerror_get_last()

mail()वापसी मान की जाँच करें

mail()समारोह:

TRUEयदि मेल को डिलीवरी के लिए सफलतापूर्वक स्वीकार कर लिया गया था, तो रिटर्न FALSE। यह ध्यान रखना महत्वपूर्ण है कि सिर्फ इसलिए कि डाक को डिलीवरी के लिए स्वीकार किया गया था, इसका मतलब यह नहीं है कि मेल वास्तव में इच्छित गंतव्य तक पहुंच जाएगा।

यह नोट करना महत्वपूर्ण है क्योंकि:

  • यदि आपको FALSEरिटर्न वैल्यू मिलती है तो आपको पता है कि आपके सर्वर द्वारा आपके मेल को स्वीकार करने में त्रुटि है। यह शायद एक कोडिंग समस्या नहीं है, लेकिन सर्वर कॉन्फ़िगरेशन समस्या है। ऐसा क्यों हो रहा है, यह जानने के लिए आपको अपने सिस्टम एडमिनिस्ट्रेटर से बात करने की जरूरत है।
  • यदि आपको TRUEरिटर्न वैल्यू मिलती है तो इसका मतलब यह नहीं है कि आपका ईमेल निश्चित रूप से भेजा जाएगा। इसका मतलब यह है कि PHP द्वारा सफलतापूर्वक सर्वर पर अपने संबंधित हैंडलर को ईमेल भेजा गया था। पीएचपी के नियंत्रण के बाहर विफलता के और भी बिंदु हैं जो ईमेल को नहीं भेजा जा सकता है।

तो FALSEआपको सही दिशा में इंगित करने में मदद करेगा जबकि TRUEजरूरी नहीं कि आपका ईमेल सफलतापूर्वक भेजा गया था। यह नोट करना महत्वपूर्ण है!

सुनिश्चित करें कि आपका होस्टिंग प्रदाता आपको ईमेल भेजने की अनुमति देता है और मेल भेजने को सीमित नहीं करता है

कई साझा वेबहोस्ट, विशेष रूप से मुफ्त वेबहोस्टिंग प्रदाता, या तो ईमेल को अपने सर्वर से भेजने की अनुमति नहीं देते हैं या किसी भी समय अवधि के दौरान भेजी जाने वाली राशि को सीमित कर सकते हैं। यह उनकी सस्ती सेवाओं का लाभ लेने से स्पैमर्स को सीमित करने के उनके प्रयासों के कारण है।

यदि आपको लगता है कि आपके मेजबान की ईमेल सीमाएँ हैं या ईमेल भेजने की प्रक्रिया को रोकते हैं, तो उनके FAQs की जाँच करके देखें कि क्या वे ऐसी कोई सीमाएँ सूचीबद्ध करते हैं। अन्यथा, आपको यह सत्यापित करने के लिए उनके समर्थन तक पहुंचने की आवश्यकता हो सकती है कि क्या ईमेल भेजने के आसपास कोई प्रतिबंध है।

स्पैम फ़ोल्डरों की जांच करें; ईमेल को स्पैम के रूप में चिह्नित किए जाने से रोकें

विभिन्न कारणों से, PHP (और अन्य सर्वर-साइड प्रोग्रामिंग भाषाओं) के माध्यम से भेजे गए ईमेल प्राप्तकर्ता के स्पैम फ़ोल्डर में समाप्त हो जाते हैं। अपना कोड समस्या निवारण से पहले हमेशा जांचें।

PHP के माध्यम से भेजे गए मेल को प्राप्तकर्ता के स्पैम फ़ोल्डर में भेजे जाने से बचने के लिए, विभिन्न चीजें हैं जो आप कर सकते हैं, आपके PHP कोड में और अन्यथा, आपके ईमेल को स्पैम के रूप में चिह्नित किए जाने की संभावना को कम करने के लिए। Michiel de Mare के अच्छे सुझावों में शामिल हैं:

  • यह प्रमाणित करने के लिए कि आपके ईमेल और आपके डोमेन नाम एक साथ हैं, और आपके डोमेन नाम को खराब होने से बचाने के लिए SPF और DKIM जैसी ईमेल प्रमाणीकरण विधियों का उपयोग करें । SPF वेबसाइट में आपकी साइट के लिए DNS जानकारी उत्पन्न करने के लिए एक विज़ार्ड शामिल है।
  • अपने मेल सर्वर के आईपी पते को उस डोमेन नाम पर सुनिश्चित करने के लिए अपने रिवर्स डीएनएस की जाँच करें जिसका उपयोग आप मेल भेजने के लिए करते हैं।
  • सुनिश्चित करें कि आपके द्वारा उपयोग किया जा रहा आईपी-पता एक ब्लैकलिस्ट पर नहीं है
  • सुनिश्चित करें कि रिप्लाई-टू एड्रेस एक मान्य, मौजूदा एड्रेस है।
  • ई-मेल में पताकर्ता का पूरा, वास्तविक नाम का उपयोग करें, न कि केवल ईमेल-पता (जैसे "John Smith" <[email protected]>)।
  • अपने दुरुपयोग खातों की निगरानी करें, जैसे कि दुरुपयोग @yourdomain.com और [email protected]। इसका मतलब है कि - सुनिश्चित करें कि ये खाते मौजूद हैं, पढ़ें कि उन्हें क्या भेजा गया है, और शिकायतों पर कार्रवाई करें।
  • अंत में, सदस्यता समाप्त करना वास्तव में आसान बना देता है । अन्यथा, आपके उपयोगकर्ता स्पैम बटन दबाकर सदस्यता समाप्त कर देंगे , और यह आपकी प्रतिष्ठा को प्रभावित करेगा।

देखें कि आप कैसे सुनिश्चित करते हैं कि आप जो प्रोग्राम ईमेल से भेजते हैं वह स्वचालित रूप से स्पैम के रूप में चिह्नित नहीं है? इस विषय पर अधिक जानकारी के लिए।

सुनिश्चित करें कि सभी मेल हेडर सप्लाई किए गए हैं

कुछ स्पैम सॉफ़्टवेयर मेल को अस्वीकार कर देंगे, अगर वह "हेड" और "रिप्लाई-टू" जैसे सामान्य हेडर गायब है।

$headers = array("From: [email protected]",
    "Reply-To: [email protected]",
    "X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);

सुनिश्चित करें कि मेल हेडर में कोई सिंटैक्स त्रुटियां नहीं हैं

अमान्य हेडर केवल हेडर के रूप में खराब हैं। एक गलत चरित्र यह सब हो सकता है कि यह आपके ईमेल को पटरी से उतार दे। यह सुनिश्चित करने के लिए कि आपका सिंटैक्स सही है डबल-चेक करें क्योंकि PHP आपके लिए इन त्रुटियों को नहीं पकड़ेगी।

$headers = array("From [email protected]", // missing colon
    "Reply To: [email protected]",      // missing hyphen
    "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
);

एक अशुद्ध From:प्रेषक का उपयोग न करें

जबकि मेल में प्रेषक: प्रेषक होना चाहिए, आप केवल किसी भी मूल्य का उपयोग नहीं कर सकते हैं । विशेष रूप से उपयोगकर्ता-प्रदत्त प्रेषक पतों में मेल को अवरुद्ध करने का एक निश्चित तरीका है:

$headers = array("From: $_POST[contactform_sender_email]"); // No!

कारण: आपका वेब या मेल सर्वर भेजने वाला एसपीएफ / डीकेआईएम-व्हाईटेल्ड नहीं है, जो @hotmail या @ टीमेल पते के लिए जिम्मेदार होने का दिखावा करता है। यह उन मेल From:भेजने वाले डोमेन के साथ मेल को चुपचाप छोड़ भी सकता है, जिनके लिए इसे कॉन्फ़िगर नहीं किया गया है।

सुनिश्चित करें कि प्राप्तकर्ता मान सही है

कभी-कभी समस्या ईमेल के प्राप्तकर्ता के लिए गलत मान रखने के रूप में सरल होती है। यह गलत चर का उपयोग करने के कारण हो सकता है।

$to = '[email protected]';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to

इसे जांचने का दूसरा तरीका यह है कि mail()फ़ंक्शन कॉल में प्राप्तकर्ता मान को कठिन कोड करें:

mail('[email protected]', $subject, $message, $headers); 

यह सभी mail()मापदंडों पर लागू हो सकता है ।

कई खातों में भेजें

ईमेल खाता समस्याओं से निपटने में मदद करने के लिए, विभिन्न ईमेल प्रदाताओं पर अपने ईमेल को कई ईमेल खातों में भेजें । यदि आपके ईमेल किसी उपयोगकर्ता के Gmail खाते में नहीं आ रहे हैं, तो वही ईमेल याहू खाते, हॉटमेल खाते और एक नियमित POP3 खाते (जैसे कि आपके ISP द्वारा प्रदान किया गया ईमेल खाता) को भेजें।

यदि ईमेल सभी या कुछ अन्य ईमेल खातों में आते हैं, तो आप जानते हैं कि आपका कोड ईमेल भेज रहा है, लेकिन संभावना है कि ईमेल खाता प्रदाता उन्हें किसी कारण से अवरुद्ध कर रहा है। यदि ईमेल किसी ईमेल खाते पर नहीं आता है, तो समस्या आपके कोड से संबंधित होने की अधिक संभावना है।

सुनिश्चित करें कि कोड फॉर्म विधि से मेल खाता है

यदि आपने अपनी फ़ॉर्म विधि निर्धारित कर ली है POST, तो सुनिश्चित करें कि आप $_POSTअपने फॉर्म वैल्यू की तलाश के लिए उपयोग कर रहे हैं । यदि आपने इसे सेट किया है GETया इसे बिल्कुल सेट नहीं किया है, तो सुनिश्चित करें कि आप $_GETअपने फॉर्म वैल्यू को देखने के लिए उपयोग करते हैं।

सुनिश्चित करें कि आपका फ़ॉर्म actionमान सही स्थान पर है

सुनिश्चित करें कि आपकी फ़ॉर्म actionविशेषता में एक मूल्य है जो आपके PHP मेलिंग कोड को इंगित करता है।

<form action="send_email.php" method="POST">

सुनिश्चित करें कि वेब होस्ट ईमेल भेजने का समर्थन करता है

कुछ वेब होस्टिंग प्रदाता अपने सर्वर के माध्यम से ईमेल भेजने की अनुमति नहीं देते हैं या उन्हें सक्षम नहीं करते हैं। इसके कारण अलग-अलग हो सकते हैं लेकिन अगर उन्होंने मेल भेजने को अक्षम कर दिया है तो आपको एक वैकल्पिक विधि का उपयोग करना होगा जो आपके लिए उन ईमेलों को भेजने के लिए एक तीसरे पक्ष का उपयोग करता है।

उनके तकनीकी समर्थन के लिए एक ईमेल (उनके ऑनलाइन समर्थन या FAQ के लिए एक यात्रा के बाद) को स्पष्ट करना चाहिए कि क्या ईमेल क्षमताएं आपके सर्वर पर उपलब्ध हैं।

सुनिश्चित करें कि localhostमेल सर्वर कॉन्फ़िगर किया गया है

यदि आप WAMP, MAMP, या XAMPP का उपयोग करके अपने स्थानीय वर्कस्टेशन पर विकसित कर रहे हैं, तो एक ईमेल सर्वर शायद आपके वर्कस्टेशन पर स्थापित नहीं है। एक के बिना, PHP डिफ़ॉल्ट रूप से मेल नहीं भेज सकती है।

आप एक बुनियादी मेल सर्वर स्थापित करके इसे दूर कर सकते हैं। विंडोज के लिए आप मुफ्त पारा मेल का उपयोग कर सकते हैं ।

आप अपने ईमेल भेजने के लिए SMTP का भी उपयोग कर सकते हैं। विकास द्विवेदी के इस शानदार जवाब को देखें कि यह कैसे करना है।

PHP के रिवाज को सक्षम करें mail.log

अपने MTA और PHP की लॉग फ़ाइल के अलावा, आप विशेष रूप से mail()फ़ंक्शन के लिए लॉगिंग को सक्षम कर सकते हैं । यह संपूर्ण SMTP इंटरैक्शन को रिकॉर्ड नहीं करता है, लेकिन कम से कम फ़ंक्शन कॉल पैरामीटर और मंगलाचरण स्क्रिप्ट।

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

देखें http://php.net/manual/en/mail.configuration.php जानकारी के लिए। ( या शायद php.iniया इन विकल्पों को सक्षम करना सबसे अच्छा है ।).user.ini.htaccess

एक मेल परीक्षण सेवा के साथ जांचें

आपके MTA / वेबसर्वर सेटअप का परीक्षण करने के लिए विभिन्न डिलीवरी और स्पैमेनेस जाँच सेवाएँ हैं जिनका आप उपयोग कर सकते हैं। आमतौर पर आप एक मेल जांच को भेजते हैं: उनके पते पर, फिर एक डिलीवरी रिपोर्ट और बाद में अधिक ठोस विफलताएं या विश्लेषण प्राप्त करें:

एक अलग मेलर का उपयोग करें

PHP का अंतर्निहित mail()कार्य आसान है और अक्सर काम हो जाता है, लेकिन इसकी कमियां हैं । सौभाग्य से, ऐसे विकल्प हैं जो ऊपर दिए गए बहुत सारे मुद्दों को संभालने सहित अधिक शक्ति और लचीलापन प्रदान करते हैं:

जिनमें से सभी को एक पेशेवर SMTP सर्वर / सेवा प्रदाता के साथ जोड़ा जा सकता है। (क्योंकि ईमेल सेटअप / कॉन्फ़िगरेशन के लिए विशिष्ट 08/15 साझा की गई वेबहोस्टिंग योजना हिट या मिस हो जाती है।)

39 er.irfankhan11 Jul 27 2015 at 21:01

मेल फ़ंक्शन में एक मेल हेडर जोड़ें:

$header = "From: [email protected]\r\n";
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$header.= "X-Priority: 1\r\n";

$status = mail($to, $subject, $message, $header);

if($status)
{
    echo '<p>Your mail has been sent!</p>';
} else {
    echo '<p>Something went wrong. Please try again!</p>';
}
25 sonamgupta May 20 2015 at 20:23
  1. मेल फंक्शन में हमेशा हेडर भेजने की कोशिश करें।
  2. यदि आप लोकलहोस्ट के माध्यम से मेल भेज रहे हैं तो मेल भेजने के लिए एसएमटीपी सेटिंग्स करें।
  3. यदि आप एक सर्वर के माध्यम से मेल भेज रहे हैं तो चेक करें कि आपके सर्वर पर ईमेल भेजने की सुविधा सक्षम है।
21 oneDerer Jul 09 2014 at 09:55

यदि आप अपना ईमेल भेजने के लिए SMTP कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो इसके बजाय PHPMailer का उपयोग करने का प्रयास करें । आप लाइब्रेरी को https://github.com/PHPMailer/PHPMailer से डाउनलोड कर सकते हैं ।

मैंने अपना ईमेल इस तरह से बनाया:

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");

    $mail = new PHPMailer();

    $mail->CharSet = "utf-8";
    $mail->IsSMTP();                                      // Set mailer to use SMTP
    $mail->Host = "mail.example.com";  // Specify main and backup server
    $mail->SMTPAuth = true;     // Turn on SMTP authentication
    $mail->Username = "myusername";  // SMTP username
    $mail->Password = "p@ssw0rd"; // SMTP password

    $mail->From = "[email protected]";
    $mail->FromName = "System-Ad";
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                                 // Set word wrap to 50 characters
    $mail->IsHTML(true);                                  // Set email format to HTML (true) or plain text (false)

    $mail->Subject = "This is a Sampleenter code here Email";
    $mail->Body    = $message;
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";
    $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
    $mail->addAttachment('files/file.xlsx');

    if(!$mail->Send())
    {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
    }

    echo "Message has been sent";
}
17 user1258544 Jul 09 2014 at 10:22

मेल भेजने से पहले कुछ शीर्ष लेख जोड़ें:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com'; 
$to = '[email protected]'; 
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html\r\n";
$headers .= 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

एक और बात। mail()समारोह स्थानीय होस्ट में काम नहीं कर रहा है। अपना कोड सर्वर पर अपलोड करें और प्रयास करें।

13 bat.t Sep 29 2015 at 21:25

इसने निम्नलिखित काम करके मेरे लिए 000webhost पर काम किया:

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= "Reply-To: ". $from. "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "\r\n";

ईमेल भेजते समय सीधे ईमेल पता दर्ज करें:

mail('[email protected]', $subject, $message, $headers)

का उपयोग करें ''और नहीं ""

यह कोड काम करता है, लेकिन ईमेल आधे घंटे के अंतराल के साथ प्राप्त किया गया था।

10 Karthik Jun 23 2016 at 16:02

ज्यादातर mail()फ़ंक्शन साझा होस्टिंग में अक्षम है। एक बेहतर विकल्प एसएमटीपी का उपयोग करना है। सबसे अच्छा विकल्प जीमेल या सेंडग्रिड होगा।


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>
9 iatboy Aug 05 2014 at 10:49

यदि आप केवल mail()फ़ंक्शन का उपयोग करते हैं, तो आपको कॉन्फ़िगरेशन फ़ाइल को पूरा करने की आवश्यकता है।

आपको मेल विस्तार को खोलने की आवश्यकता है, और SMTP smtp_portऔर इसी तरह, और सबसे महत्वपूर्ण, अपना उपयोगकर्ता नाम और अपना पासवर्ड सेट करें। उसके बिना, मेल नहीं भेजा जा सकता। इसके अलावा, आप PHPMailभेजने के लिए कक्षा का उपयोग कर सकते हैं ।

9 vldfr Feb 11 2015 at 22:20

इन दोनों चीजों को अलग-अलग और एक साथ आज़माएँ:

  1. हटाए if($_POST['submit']){}
  2. निकालें $from(बस मेरी आंत)
8 StephenM Jan 03 2015 at 09:32

मुझे लगता है कि यह चाल चलनी चाहिए। मैंने अभी अभी if(issetHTML से PHP को अलग करने के लिए शरीर में चर में एक जोड़ा और जोड़ा।

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = '[email protected]'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>
8 Machavity May 20 2016 at 19:45

जो कोई भी इसे आगे बढ़ाता है, उसके लिए मैं उपयोग करने की सलाह नहीं दूंगा mail। कुछ उत्तर हैं जो इस पर स्पर्श करते हैं, लेकिन इसके क्यों नहीं ।

PHP का mailकार्य न केवल अपारदर्शी है, यह पूरी तरह से उस एमटीए पर निर्भर करता है जो आप काम करने के लिए (यानी सेंडमेल ) का उपयोग करते हैं। mailहोगा केवल आपको बताती हैं कि एमटीए इसे स्वीकार करने में विफल रहा है (जब आप भेजने की कोशिश की यानी सेंडमेल नीचे था)। यह आपको बता नहीं सकता है कि मेल सफल रहा क्योंकि इसे बंद कर दिया गया है। इस तरह के रूप में ( जॉन कोनडे के उत्तर के विवरण के रूप में), अब आप एमटीए के लॉग के साथ फिडेल करते हैं और आशा करते हैं कि यह आपको इसे ठीक करने में विफलता के बारे में पर्याप्त बताता है। यदि आप एक साझा होस्ट पर हैं या MTA लॉग्स तक पहुँच नहीं है, तो आप भाग्य से बाहर हैं। अफसोस की बात है, लिनक्स के लिए अधिकांश वेनिला इंस्टॉल करने के लिए डिफ़ॉल्ट इसे इस तरह से संभालता है।

एक मेल लाइब्रेरी ( PHPMailer , Zend फ्रेमवर्क 2+, आदि), से बहुत अलग कुछ करता है mail। वे सीधे मेल सर्वर को एक सॉकेट खोलते हैं और फिर उस सॉकेट पर सीधे एसएमटीपी मेल कमांड भेजते हैं। दूसरे शब्दों में, वर्ग अपने स्वयं के एमटीए के रूप में कार्य करता है (ध्यान दें कि आप पुस्तकालयों mailको अंततः मेल भेजने के लिए उपयोग करने के लिए कह सकते हैं , लेकिन मैं आपको सलाह देता हूं कि आप ऐसा न करें)।

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

यदि आप SMTP (यानी आप कॉल कर रहे हैं isSMTP()) का उपयोग कर रहे हैं , तो आप SMTPDebugसंपत्ति का उपयोग करके SMTP वार्तालाप की एक विस्तृत प्रतिलिपि प्राप्त कर सकते हैं।

अपनी स्क्रिप्ट में इस तरह एक लाइन शामिल करके इस विकल्प को सेट करें:

$mail->SMTPDebug = 2;

आपको एक बेहतर इंटरफ़ेस का लाभ भी मिलता है। आपके साथ mailअपने सभी हेडर, अटैचमेंट्स इत्यादि को स्थापित करना होगा। लाइब्रेरी के साथ, आपके पास ऐसा करने के लिए एक समर्पित कार्य है। इसका मतलब यह भी है कि फ़ंक्शन सभी मुश्किल भागों (जैसे हेडर) कर रहा है।

6 Chiragpatel Jul 13 2015 at 14:27
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
    $subject = $name;
    // To send HTML mail, the Content-type header must be set.
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $email. "\r\n"; // Sender's Email
    //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
    $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
        . '<br/><br/>'
        . 'Name:' .$name.'<br/>'
        . 'Email:' .$email.'<br/>'
        . '<br/>'
        . '</div>';
    $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
    // Message lines should not exceed 70 characters (PHP rule), so wrap it.
    $sendmessage = wordwrap($sendmessage, 70);
    // Send mail by PHP Mail Function.
    mail($reciver, $subject, $sendmessage, $headers);
    echo "Your Query has been received, We will contact you soon.";
} else {
    echo "<span>* invalid email *</span>";
}
6 dEsta88 Oct 07 2014 at 05:33

आप CodeIgniter द्वारा कॉन्फ़िगर ईमेल का उपयोग कर सकते हैं । उदाहरण के लिए, SMTP (सरल तरीका) का उपयोग करना:

$config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'mail.domain.com', // Your SMTP host
        'smtp_port' => 26, // Default port for SMTP
        'smtp_user' => '[email protected]',
        'smtp_pass' => 'password',
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('[email protected]', 'Title');
$this->email->to('[email protected]');
$this->email->subject('Header');
$this->email->message($message);

if($this->email->send()) 
{
   // Conditional true
}

इससे मेरा काम बनता है!

4 GauravSirauthiya Jun 23 2015 at 17:58

इसे इस्तेमाल करे

if ($_POST['submit']) {
    $success= mail($to, $subject, $body, $from);
    if($success)
    { 
        echo '
        <p>Your message has been sent!</p>
        ';
    } else { 
        echo '
        <p>Something went wrong, go back and try again!</p>
        '; 
    }
}
4 JackCh Mar 20 2018 at 02:09

हो सकता है कि समस्या मेल सर्वर के कॉन्फ़िगरेशन की हो। इस प्रकार की समस्याओं से बचने के लिए या आपको मेल सर्वर समस्या के बारे में चिंता करने की आवश्यकता नहीं है, मैं आपको PHPMailer का उपयोग करने की सलाह देता हूं ।

यह एक प्लगइन है जिसमें मेल भेजने के लिए आवश्यक सब कुछ है, और केवल एक चीज जिसे आपको ध्यान में रखना है वह है एसएमटीपी पोर्ट (पोर्ट: 25 और 465), सक्षम।

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
    //Server settings
    $mail->SMTPDebug = 0;
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = '[email protected]';
    $mail->Password = 'contrasenia';
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;

    // Recipients
    $mail->setFrom('[email protected]', 'my name');
    $mail->addAddress('[email protected]');

    // Attachments
    $mail->addAttachment('optional file');         // Add files, is optional

    // Content
    $mail->isHTML(true);// Set email format to HTML
    $mail->Subject = utf8_decode("subject");
    $mail->Body    = utf8_decode("mail content");
    $mail->AltBody = '';
    $mail->send();
}
catch (Exception $e) {
    $error = $mail->ErrorInfo;
}
3 Daniel Sep 24 2017 at 10:50

सुनिश्चित करें कि आपके पास Sendmail आपके सर्वर में स्थापित है।

यदि आपने अपना कोड चेक किया है और सत्यापित किया है कि वहां कुछ भी गलत नहीं है, तो / var / mail पर जाएं और जांचें कि क्या वह फ़ोल्डर खाली है।

यदि यह खाली है, तो आपको निम्न कार्य करना होगा:

sudo apt-get install sendmail

यदि आप उबंटू सर्वर पर हैं।

3 aidangig Jan 31 2016 at 21:15

सबसे पहले, आपके पास मेल () फ़ंक्शन के लिए बहुत अधिक पैरामीटर हो सकते हैं ... आप अधिकतम पांच, mail(to, subject, message, headers, parameters);

जहां तक $fromवैरिएबल जाता है, कि आपके वेबहोस्ट से स्वचालित रूप से आना चाहिए यदि आपका लिनक्स cPanel का उपयोग कर रहा है । यह स्वचालित रूप से आपके cPanel उपयोगकर्ता नाम और आईपी पते से आता है।

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

यह भी सुनिश्चित करें कि आपके मेल () फ़ंक्शन में चर का सही क्रम है।

mail($to, $subject, $message, etc.)इसी क्रम में, वरना वहाँ यह काम नहीं कर का एक मौका है।

3 JohnSlegers Feb 10 2016 at 20:23

यदि आपको PHP के साथ मेल भेजने में समस्या हो रही है, तो PHPMailer या SwiftMailer जैसे विकल्प पर विचार करें ।

जब भी मुझे PHP के साथ मेल भेजने की आवश्यकता होती है, मैं आमतौर पर SwiftMailer का उपयोग करता हूं।


मूल उपयोग:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('[email protected]' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('[email protected]' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');

if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
    echo json_encode([
        "status" => "OK",
        "message" => 'Your message has been sent!'
    ], JSON_PRETTY_PRINT);
} else {
    echo json_encode([
        "status" => "error",
        "message" => 'Oops! Something went wrong!'
    ], JSON_PRETTY_PRINT);
}

SwiftMailer का उपयोग कैसे करें के बारे में अधिक जानकारी के लिए आधिकारिक दस्तावेज देखें ।

3 user3132194 Jun 21 2017 at 19:07

उन लोगों के लिए जो बाहरी मेलर्स का उपयोग नहीं करना चाहते हैं और समर्पित लिनक्स सर्वर पर मेल () करना चाहते हैं।

जिस तरह से, PHP मेल कैसे, php.iniअनुभाग में वर्णित है [mail function]

पैरामीटर sendmail-pathबताता है कि सेंडमेल को कैसे कहा जाता है। डिफ़ॉल्ट मान है sendmail -t -i, इसलिए यदि आपको sendmail -t -i < message.txtलिनक्स कंसोल में एक काम मिलता है - तो आपको किया जाएगा। आप mail.logडिबग में भी जोड़ सकते हैं और सुनिश्चित करें कि मेल () वास्तव में कहा जाता है।

विभिन्न एमटीए लागू कर सकते हैं sendmail। वे बस उस नाम पर अपने बायनेरिज़ का एक प्रतीकात्मक लिंक बनाते हैं। उदाहरण के लिए, डेबियन में डिफ़ॉल्ट पोस्टफिक्स है । मेल भेजने के लिए अपने MTA को कॉन्फ़िगर करें और इसे कंसोल से परीक्षण करें sendmail -v -t -i < message.txt। फ़ाइल message.txtमें एक संदेश और एक निकाय के सभी शीर्षलेख शामिल होने चाहिए, लिफाफे के लिए गंतव्य पता To:हेडर से लिया जाएगा । उदाहरण:

From: [email protected]
To: [email protected]
Subject: Test mail via sendmail.

Text body.

मैं एमटीए के रूप में ssmtp का उपयोग करना पसंद करता हूं क्योंकि यह सरल है और खुले बंदरगाहों के साथ डेमॉन चलाने की आवश्यकता नहीं है। ssmtp केवल लोकलहोस्ट से मेल भेजने के लिए फिट बैठता है । यह एक सार्वजनिक मेल सेवा पर आपके खाते के माध्यम से प्रमाणित ईमेल भी भेज सकता है। Ssmtp स्थापित करें और कॉन्फ़िगरेशन फ़ाइल संपादित करें /etc/ssmtp/ssmtp.conf। यूनिक्स खातों (उदाहरण के लिए, क्रोन नौकरियों से रूट करने के लिए अलर्ट) को कॉन्फ़िगर करने के लिए स्थानीय सिस्टम मेल प्राप्त करने में सक्षम होने के लिए, /etc/ssmtp/revaliasesफ़ाइल को कॉन्फ़िगर करें ।

यहां यैंडेक्स मेल पर मेरे खाते के लिए मेरा कॉन्फ़िगरेशन है:

[email protected]
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=password
2 TonyLuigiC Apr 05 2017 at 08:09

यह केवल कुछ मुट्ठी भर उपयोगकर्ताओं को प्रभावित करेगा, लेकिन मैं इसे उस छोटे मुट्ठी भर के लिए प्रलेखित करना चाहूंगा। इस छोटे से मुट्ठी भर सदस्य ने इस समस्या के कारण वर्किंग PHP मेल स्क्रिप्ट के 6 घंटे का समय बिताया।

यदि आप www.AceITLab.com से XAMPP चलाने वाले विश्वविद्यालय में जा रहे हैं, तो आपको पता होना चाहिए कि हमारे प्रोफेसर ने हमें क्या नहीं बताया: AceITLab फ़ायरवॉल (विंडोज फ़ायरवॉल नहीं) XAMPP में MercuryMail को ब्लॉक करता है। आपको एक वैकल्पिक मेल क्लाइंट का उपयोग करना होगा, नाशपाती हमारे लिए काम कर रही है। आपको कम सुरक्षा सेटिंग वाले Gmail खाते में भेजना होगा।

हां, मुझे पता है, यह वास्तविक दुनिया के ईमेल के लिए पूरी तरह से बेकार है। हालाँकि, मैंने जो देखा है, अकादमिक सेटिंग्स और वास्तविक दुनिया में अक्सर कीमती कम है।

1 Ron Apr 01 2017 at 10:30

यदि आप इस कोड को किसी स्थानीय सर्वर (यानी आपके कंप्यूटर को विकास के उद्देश्य से) चला रहे हैं, तो यह प्राप्तकर्ता को ईमेल नहीं भेजेगा। यह .txtनाम के फोल्डर में एक फाइल बनाएगा mailoutput

इस मामले में यदि आप मुफ्त में सेवा का उपयोग कर रहे हैं, जैसे, 000webhostया hostinger, वे सेवा प्रदाता mail()ईमेल स्पूफिंग, स्पैमिंग आदि के अनपेक्षित उपयोगों को रोकने के लिए फ़ंक्शन को अक्षम करते हैं, तो मैं आपको यह देखने के लिए उनसे संपर्क करना पसंद करता हूं कि वे इस सुविधा का समर्थन करते हैं या नहीं।

यदि आप सुनिश्चित हैं कि सेवा प्रदाता मेल () फ़ंक्शन का समर्थन करता है, तो आप आगे के संदर्भ के लिए इस PHP मैनुअल की जांच कर सकते हैं,

PHP मेल ()

मौसम की जांच करने के लिए आपकी होस्टिंग सेवा मेल () फ़ंक्शन का समर्थन करती है, इस कोड को चलाने का प्रयास करें (प्राप्तकर्ता ईमेल पता बदलने के लिए याद रखें) :

<?php
    $to      = '[email protected]';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: [email protected]' . "\r\n" .
        'Reply-To: [email protected]' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
?>
1 BadLoser Aug 21 2019 at 16:14

डेबियन 10.0.0 ('बस्टर') के लिए Sendmail संस्थापन वास्तव में तुच्छ था!

php.ini

[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)

मानक Sendmail पैकेज स्थापित ('भेजना'):

su -                                        # Install as user 'root'
dpkg --list                                 # Is install necessary?
apt-get install sendmail sendmail-cf m4     # Note multiple package selection
sendmailconfig                              # Respond all 'Y' for new install

विविध उपयोगी आदेश:

which sendmail                              # /usr/sbin/sendmail
which sendmailconfig                        # /usr/sbin/sendmailconfig
man sendmail                                # Documentation
systemctl restart sendmail                  # As and when required

सत्यापन (भेजने की क्षमता)

echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com

ऊपर से लगभग 5 मिनट लगे। फिर मैंने 5 घंटे बर्बाद कर दिए ... अपना स्पैम फोल्डर देखना न भूलें !

SuReSh Apr 28 2015 at 13:08

कई संभावनाएं हैं:

  1. आप सर्वर समस्या का सामना कर रहे हैं। सर्वर में कोई मेल सर्वर नहीं है। इसलिए आपका मेल काम नहीं कर रहा है, क्योंकि आपका कोड ठीक है और मेल टाइप के साथ काम कर रहा है।

  2. आपको पोस्ट किया गया मान नहीं मिल रहा है। एक स्थिर मूल्य के साथ अपने कोड का प्रयास करें।

  3. मेल भेजने के लिए SMTP मेल का उपयोग करें ...

krishna Dec 23 2018 at 21:25

आप अपनी त्रुटियों को निम्न द्वारा देख सकते हैं:

error_reporting(E_ALL);

और मेरा नमूना कोड है:

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'PHPMailer.php';
    require 'SMTP.php';
    require 'Exception.php';

    $name = $_POST['name'];
    $mailid = $_POST['mail'];
    $mail = new PHPMailer;
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;                   // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';         // Specify main and backup server
    $mail->Port = 587;                      // Set the SMTP port
    $mail->SMTPAuth = true;                 // Enable SMTP authentication
    $mail->Username = '[email protected]';  // SMTP username
    $mail->Password = 'password';           // SMTP password
    $mail->SMTPSecure = 'tls';              // Enable encryption, 'ssl' also accepted

    $mail->From = '[email protected]';
    $mail->FromName = 'name';
    $mail->AddAddress($mailid, $name);       // Name is optional
    $mail->IsHTML(true);                     // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'Here is your message' ;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    if (!$mail->Send()) {
       echo 'Message could not be sent.';
       echo 'Mailer Error: ' . $mail->ErrorInfo;
       exit;
    }
    echo 'Message has been sent';
?>
ofricofri Aug 16 2020 at 08:44

यदि आप Hostgator पर होस्ट किए गए किसी ऐप से चिपके हुए हैं, तो इससे मेरी समस्या हल हो जाती है। विस्तृत समाधान पोस्ट करने वाले व्यक्ति को बहुत धन्यवाद। यदि लिंक एक दिन ऑफ़लाइन हो जाता है, तो आपके पास सारांश है:

  • अपने सर्वर में सेंडमेल पथ देखें। इसे जांचने का एक सरल तरीका है, निम्न कोड को अस्थायी रूप से एक पृष्ठ में लिखना है, जिसे केवल आप ही एक्सेस करेंगे, उत्पन्न जानकारी को पढ़ने के लिए <?php phpinfo(); ?>:। इस पृष्ठ को खोलें, और देखें sendmail path। (फिर, इस कोड को हटाने के लिए मत भूलना!)
  • समस्या और समाधान: यदि आपका प्रेषक पथ केवल कह रहा है -t -i, तो अपने सर्वर को संपादित करें php.iniऔर निम्नलिखित पंक्ति जोड़ें:sendmail_path = /usr/sbin/sendmail -t -i;

लेकिन, PHP mail()फ़ंक्शन के साथ मेल भेजने में सक्षम होने के बाद , मैंने सीखा कि यह प्रमाणित ईमेल नहीं भेजता है, जिसने एक और मुद्दा बनाया है। ईमेल सभी मेरे हॉटमेल के जंक मेल बॉक्स में गिर रहे थे, और कुछ ईमेल कभी डिलीवर नहीं हुए थे, जो मुझे लगता है कि इस तथ्य से संबंधित है कि वे प्रमाणित नहीं हैं। यही कारण है कि मैं से स्विच करने का फैसला किया है mail()करने के लिए PHPMailer, एसएमटीपी के साथ सब के बाद।