PHPMailer, PHP से ईमेल भेजने के लिए सबसे ज़्यादा इस्तेमाल होने वाली लाइब्रेरी है। यह SMTP को रैप करती है, इसलिए आप होस्ट, पोर्ट और क्रेडेंशियल एक बार कॉन्फ़िगर करते हैं, फिर एक स्पष्ट ऑब्जेक्ट API से संदेश बनाते और भेजते हैं। PHP का बिल्ट-इन mail() फ़ंक्शन बहुत कम करता है (न प्रमाणीकरण, न ठीक से त्रुटि रिपोर्टिंग), इसलिए ज़्यादातर प्रोजेक्ट इसकी जगह PHPMailer अपनाते हैं। नीचे भेजने का एक पूरा, काम करने वाला उदाहरण है।
PHPMailer कैसे इंस्टॉल करें?
Composer का इस्तेमाल करें:
composer require phpmailer/phpmailer
फिर ऑटोलोडर लोड करें और ज़रूरी क्लास इम्पोर्ट करें:
<?php
require "vendor/autoload.php";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
SMTP कैसे कॉन्फ़िगर करें और संदेश कैसे भेजें?
एक PHPMailer इंस्टेंस बनाएँ, isSMTP() से उसे SMTP मोड में डालें, फिर कनेक्शन और संदेश के फ़ील्ड सेट करें। कॉल को try/catch में रखें, ताकि भेजना विफल होने पर त्रुटि दबने के बजाय रिपोर्ट हो:
<?php
$mail = new PHPMailer(true); // true enables exceptions
try {
// Server settings
$mail->isSMTP();
$mail->Host = "smtp.example.com";
$mail->SMTPAuth = true;
$mail->Username = getenv("SMTP_USER");
$mail->Password = getenv("SMTP_PASS");
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// Recipients
$mail->setFrom("you@yourdomain.com", "Your App");
$mail->addAddress("recipient@example.org", "Recipient Name");
// Content
$mail->isHTML(true);
$mail->Subject = "Your receipt";
$mail->Body = "<p>Thanks for your order.</p>";
$mail->AltBody = "Thanks for your order. This is the plain-text version.";
$mail->send();
echo "Message sent.";
} catch (Exception $e) {
echo "Send failed: {$mail->ErrorInfo}";
}
कुछ बातों में अक्सर गलती होती है। SMTPSecure और Port साथ चलते हैं: 587 के साथ ENCRYPTION_STARTTLS इस्तेमाल करें, या 465 के साथ ENCRYPTION_SMTPS। isHTML(true) PHPMailer को बताता है कि Body HTML है और AltBody को प्लेन-टेक्स्ट विकल्प के रूप में भेजना है। कंस्ट्रक्टर में true पास करें, ताकि विफल होने पर चुपचाप false लौटाने के बजाय Exception थ्रो हो।
अटैचमेंट कैसे जोड़ें?
send() से पहले फ़ाइल पाथ के साथ addAttachment कॉल करें:
<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");
दूसरा तर्क फ़ाइल का वह नाम तय करता है जो प्राप्तकर्ता को दिखता है। एक से ज़्यादा अटैचमेंट के लिए आप इसे कई बार कॉल कर सकते हैं।
Bird से भेजें
PHPMailer SMTP पर काम करता है, इसलिए प्रोडक्शन में आपको साफ़ प्रतिष्ठा वाला मेल सर्वर, सही ऑथेंटिकेशन रिकॉर्ड और भेजने के बाद क्या हुआ यह देखने की जगह चाहिए। HTTP API सर्वर की ज़रूरत खत्म कर देता है। आप HTTPS पर JSON भेजते हैं और एक संरचित प्रतिक्रिया पाते हैं। Bird ईमेल API के साथ वही संदेश एक ही कॉल में जाता है:
use Bird\Bird;
$bird = new Bird(getenv("BIRD_API_KEY"));
$bird->emails->send([
"from" => "you@yourdomain.com",
"to" => "delivered@bird.dev",
"subject" => "Hello from PHP",
"html" => "<p>It works.</p>",
]);
delivered@bird.dev सैंडबॉक्स पता हमेशा मेल स्वीकार करता है, इसलिए असली इनबॉक्स में भेजने से पहले आप इंटीग्रेशन जाँच सकते हैं। न SMTP सॉकेट, न पोर्ट चुनना, न खुद प्रतिष्ठा बनानी।
अक्सर पूछे जाने वाले प्रश्न
सिर्फ़ PHP का mail() फ़ंक्शन क्यों न इस्तेमाल करें?
mail() संदेश को स्थानीय sendmail बाइनरी को सौंप देता है, जिसमें न SMTP ऑथेंटिकेशन होता है और न लगभग कोई त्रुटि रिपोर्टिंग। PHPMailer रिमोट सर्वर पर ऑथेंटिकेट करता है, TLS सपोर्ट करता है, मल्टीपार्ट संदेश बनाता है और बताता है कि भेजना क्यों विफल हुआ।
Body और AltBody में क्या अंतर है?
Body HTML संस्करण है और AltBody सादा-टेक्स्ट विकल्प। isHTML(true) सेट होने पर, जो क्लाइंट HTML नहीं दिखा सकते वे AltBody दिखाते हैं, और इससे डिलीवरेबिलिटी में भी मदद मिलती है।
STARTTLS या SMTPS?
पोर्ट 587 पर ENCRYPTION_STARTTLS एक सादे कनेक्शन को TLS में अपग्रेड करता है, जबकि पोर्ट 465 पर ENCRYPTION_SMTPS शुरू से ही एन्क्रिप्टेड होता है। सेटिंग को उस पोर्ट से मिलाएँ जिसकी आपका मेल सर्वर अपेक्षा करता है।
जब आप PHP से SMTP पर भेजना चाहते हैं, तब PHPMailer सही टूल है। अगर आप सर्वर चलाने से बचना चाहते हैं, तो ईमेल भेजने की गाइड API का पूरा तरीका दिखाती है।