PHP का उपयोग करके ईमेल कैसे भेजें?


312

मैं एक वेबसाइट पर PHP का उपयोग कर रहा हूं और मैं ईमेल की कार्यक्षमता जोड़ना चाहता हूं।

मेरे पास WAMPSERVER स्थापित है।

मैं PHP का उपयोग करके ईमेल कैसे भेजूं?


जवाबों:


442

PHP के mail()फ़ंक्शन का उपयोग करना संभव है। याद रखें कि मेल फ़ंक्शन स्थानीय सर्वर पर काम नहीं करेगा।

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

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

संदर्भ:


6
क्या होगा अगर मुझे स्थानीय सर्वर से एक ईमेल भेजने की आवश्यकता है। मेरा मतलब है कि निकटतम मेलिंग सर्वर तक पहुंचने और इसे मेरे लिए मेल भेजने का कोई तरीका है। मेरा मतलब है कि मैं एक याहू मेलिंग सर्वर का पता पा सकता हूं और फिर मैं उस सर्वर का उपयोग डाक के प्रयोजनों के लिए कर सकता हूं ... क्या यह संभव है?
user590849

19
आपको अपने स्थानीय सर्वर पर एसएमटीपी को कॉन्फ़िगर करना होगा। इसी तरह की पोस्ट पर एक नज़र डालें, stackoverflow.com/questions/4652566/php-mail-setup-in-xampp
मुथु कुमारन

नमस्ते @MuthuKumaran अगर वह स्पैम में जाता है तो क्या इसे हल करने के लिए कोई अच्छा उपाय है, कृपया जवाब दें।
मुहम्मद आशिक़ुज़्ज़मान

@MuhammadAshikuzzaman आप PHP में स्पैम समस्या को हल नहीं कर सकते। कृपया उपयुक्त StackExchange साइट पर एक नया प्रश्न पूछें यदि यह अभी भी प्रासंगिक है।
उली कोहलर

अगर यह मेरे स्थानीय सर्वर पर काम करता है तो यह सुनिश्चित या सत्यापित कैसे करें? यदि ऐसा करने के लिए संभव तरीके नहीं हैं, तो कृपया कुछ विकल्प सुझाएं। धन्यवाद।
अभिषेक

120

आप https://github.com/PHPMailer/PHPMailer पर PHPMailer वर्ग का भी उपयोग कर सकते हैं ।

यह आपको मेल फ़ंक्शन का उपयोग करने या पारदर्शी रूप से एक smtp सर्वर का उपयोग करने की अनुमति देता है। यह HTML आधारित ईमेल और अटैचमेंट भी संभालता है ताकि आपको अपना खुद का कार्यान्वयन लिखना न पड़े।

वर्ग स्थिर है और इसका उपयोग Drupal, SugarCRM, Yii, और Joomla जैसी कई अन्य परियोजनाओं द्वारा किया जाता है!

यहाँ ऊपर के पेज से एक उदाहरण दिया गया है:

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'user@example.com';                 // SMTP username
$mail->Password = 'secret';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable encryption, 'ssl' also accepted

$mail->From = 'from@example.com';
$mail->FromName = 'Mailer';
$mail->addAddress('joe@example.net', 'Joe User');     // Add a recipient
$mail->addAddress('ellen@example.com');               // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');

$mail->WordWrap = 50;                                 // Set word wrap to 50 characters
$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$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;
} else {
    echo 'Message has been sent';
}

4
यदि संगीतकार का उपयोग नहीं किया गया है:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

43

यदि आप HTML स्वरूपित ईमेल में रुचि रखते हैं, तो Content-type: text/html;हेडर में पास करना सुनिश्चित करें । उदाहरण:

// multiple recipients
$to  = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// 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";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

अधिक जानकारी के लिए, php मेल फ़ंक्शन की जाँच करें ।


हैलो, मैंने इस कोड को थका दिया, मैंने 3 प्राप्तकर्ता, एक हॉटमेल, एक जीमेल और एक मेरी वेबसाइट ईमेल जोड़ा। मुझे हॉटमेल को छोड़कर सभी प्राप्त हुए। क्या आपको अंदाजा है कि यह हॉटमेल के लिए काम क्यों नहीं कर रहा है?
22

कृपया उस स्थिति में स्पैम फ़ोल्डर की जाँच करें।
सूमोदानंद

मैंने पहले ही किया था, यह स्पैम में नहीं है, यह बिल्कुल नहीं पहुंच रहा है। मैं इस विषय के बारे में थोड़ा और पढ़ता हूं और ऐसा लगता है कि हॉटमेल को कुछ विशेष हेडर की आवश्यकता होती है या यह ईमेल को उनके सर्वर को पारित करने की अनुमति नहीं देता है ... मुझे अभी भी समाधान नहीं मिला है।
एनएफ

मैंने PHPMailer का उपयोग करके और PHPMailer के ईमेल ऑब्जेक्ट में SSL के साथ अपना ईमेल खाता डेटा दर्ज करके अपनी समस्या को हल किया।
एनएफ

यदि संदेश में HTML और php सामग्री है तो क्या होगा?

14

PEAR मेल पैकेज नाशपाती मेल पेज में भी देखें

यह मानक मेल () फ़ंक्शन में निर्मित (यदि मानक फ़ंक्शन पर्याप्त नहीं है) की तुलना में थोड़ा अधिक मजबूत प्रतीत होता है।

इस पृष्ठ का एक अंश यहां दिखाया गया है कि इसका उपयोग कैसे किया जाता है। PEAR मेल भेजें () उपयोग

<?php
    include('Mail.php');

    $recipients = 'joe@example.com';

    $headers['From']    = 'richard@example.com';
    $headers['To']      = 'joe@example.com';
    $headers['Subject'] = 'Test message';

    $body = 'Test message';

    $smtpinfo["host"] = "smtp.server.com";
    $smtpinfo["port"] = "25";
    $smtpinfo["auth"] = true;
    $smtpinfo["username"] = "smtp_user";
    $smtpinfo["password"] = "smtp_password";


    // Create the mail object using the Mail::factory method
    $mail_object =& Mail::factory("smtp", $smtpinfo); 

    $mail_object->send($recipients, $headers, $body);
?> 

कृपया अपने उपयोग किए गए mail.php लिंक और अन्य सभी संबद्ध फ़ाइल को एक फ़ोल्डर में डाउनलोड करने का लिंक दें। धन्यवाद
मुहम्मद Ashikuzzaman

1
@Ashik Mail.phpमेरे उदाहरण में संदर्भित फ़ाइल नाशपाती मेल पैकेज का हिस्सा है। यदि आप पीयर मेल पैकेज को डाउनलोड और इंस्टॉल करते हैं, तो आप शामिल कर पाएंगे Mail.php। यदि आप ऊपर दिए गए 'पीयर मेल पेज' लिंक पर क्लिक करते हैं, तो निर्देशों के साथ डाउनलोड लिंक है।
केविन एस

12

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


मूल उपयोग:

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('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => '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);
}

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


नमस्ते। आपने कहा कि Swift_MailTransportजब आपके लिंक टू डॉक्यूमेंटेशन कहते हैं Swift_SendmailTransport। क्या इसका मतलब है कि आप स्विफ्ट मेलर के पुराने संस्करण का उल्लेख कर रहे हैं या यह एक टाइपो है, या शायद मैं कुछ गलत समझ रहा हूं? मुझे स्विफ्ट-मेलर के पुराने संस्करण को स्थापित करने की आवश्यकता है क्योंकि मेरे सर्वर पर php7 नहीं है। इसलिए मुझे यह जानने की जरूरत है कि क्या मौजूदा संस्करण के लिए प्रलेखन पैकेज के पुराने संस्करण के साथ जाएगा। धन्यवाद।
येवगेनी अफानसेयेव

1
@YevgeniyAfanasyev: मेरा जवाब 2 साल पहले चीजों को करने का सही तरीका था, लेकिन Swift_MailTransport को Swiftmailer v5.4.5 के बाद से हटा दिया गया है । वैसे भी, यदि आप अपने प्रोजेक्ट के लिए PHP 7 का उपयोग नहीं कर सकते हैं, तो आपको Swiftmailer v5.4.9 के साथ जाना चाहिए। यह अंतिम स्थिर संस्करण है जो अभी भी PHP 5 का समर्थन करता है। संस्करण v5.4.9 के प्रलेखन के लिए या v5.4.9 और v6.0.2 के बीच के अंतर के विवरण के लिए, आप फैबिएन पोटेंसीयर से संपर्क करना चाहते हैं या जीथब पर एक मुद्दा उठा सकते हैं ।
जॉन सलेगर्स

आपका बहुत बहुत धन्यवाद। तो पुराने संस्करण के लिए कोई दस्तावेज उपलब्ध नहीं है, जब वितरण उपलब्ध हैं। जानकार अच्छा लगा।
येवगेनी अफानासियेव

7

मेल फ़ंक्शन का उपयोग करके सादे पाठ ईमेल भेजने के लिए यह बहुत ही मूल तरीका है।

<?php
$to = 'SomeOtherEmailAddress@Domain.com';
$subject = 'This is subject';
$message = 'This is body of email';
$from = "From: FirstName LastName <SomeEmailAddress@Domain.com>";
mail($to,$subject,$message,$from);

7

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

<?php
$to = "somebody@example.com";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com";

mail($to,$subject,$txt,$headers);
?>

5

पूर्ण कोड उदाहरण ।।

एक बार आजमा कर देखें ।।

<?php
// Multiple recipients
$to = 'johny@example.com, sally@example.com'; // note the comma

// Subject
$subject = 'Birthday Reminders for August';

// Message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Johny</td><td>10th</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';

// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';

// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
?>

5

भविष्य के पाठकों के लिए: यदि अन्य उत्तर काम नहीं करते हैं तो यह कोशिश करें (जैसा कि मेरे साथ हुआ था):

1.) PHPMailer डाउनलोड करें , ज़िप फ़ाइल खोलें और फ़ोल्डर को अपनी परियोजना निर्देशिका में निकालें।

3.) निकाले गए निर्देशिका को PHPMailer का नाम बदलें और अपनी php स्क्रिप्ट के अंदर नीचे कोड लिखें (स्क्रिप्ट PHPMailer फ़ोल्डर के बाहर होनी चाहिए )

<?php
// PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception;
// Base files 
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
// create object of PHPMailer class with boolean parameter which sets/unsets exception.
$mail = new PHPMailer(true);                              
try {
    $mail->isSMTP(); // using SMTP protocol                                     
    $mail->Host = 'smtp.gmail.com'; // SMTP host as gmail 
    $mail->SMTPAuth = true;  // enable smtp authentication                             
    $mail->Username = 'sender@gmail.com';  // sender gmail host              
    $mail->Password = 'password'; // sender gmail host password                          
    $mail->SMTPSecure = 'tls';  // for encrypted connection                           
    $mail->Port = 587;   // port for SMTP     

    $mail->setFrom('sender@gmail.com', "Sender"); // sender's email and name
    $mail->addAddress('receiver@gmail.com', "Receiver");  // receiver's email and name

    $mail->Subject = 'Test subject';
    $mail->Body    = 'Test body';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) { // handle error.
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>

5

मूल PHP फ़ंक्शन mail()मेरे लिए काम नहीं करता है। यह संदेश जारी करता है:

503 गैर-स्थानीय ई-मेल पते पर भेजने का प्रयास करते समय इस मेल सर्वर को प्रमाणीकरण की आवश्यकता होती है

इसलिए, मैं आमतौर पर PHPMailerपैकेज का उपयोग करता हूं

मैंने 5.2.23 से संस्करण डाउनलोड किया है: GitHub

मैंने अभी 2 फाइलें ली हैं और उन्हें अपने स्रोत PHP रूट में डाल दिया है

class.phpmailer.php
class.smtp.php

PHP में, फ़ाइल को जोड़ना होगा

require_once('class.smtp.php');
require_once('class.phpmailer.php');

इसके बाद, यह सिर्फ कोड है:

require_once('class.smtp.php');
require_once('class.phpmailer.php');
... 
//----------------------------------------------
// Send an e-mail. Returns true if successful 
//
//   $to - destination
//   $nameto - destination name
//   $subject - e-mail subject
//   $message - HTML e-mail body
//   altmess - text alternative for HTML.
//----------------------------------------------
function sendmail($to,$nameto,$subject,$message,$altmess)  {

  $from  = "yourcontact@yourdomain.com";
  $namefrom = "yourname";
  $mail = new PHPMailer();  
  $mail->CharSet = 'UTF-8';
  $mail->isSMTP();   // by SMTP
  $mail->SMTPAuth   = true;   // user and password
  $mail->Host       = "localhost";
  $mail->Port       = 25;
  $mail->Username   = $from;  
  $mail->Password   = "yourpassword";
  $mail->SMTPSecure = "";    // options: 'ssl', 'tls' , ''  
  $mail->setFrom($from,$namefrom);   // From (origin)
  $mail->addCC($from,$namefrom);      // There is also addBCC
  $mail->Subject  = $subject;
  $mail->AltBody  = $altmess;
  $mail->Body = $message;
  $mail->isHTML();   // Set HTML type
//$mail->addAttachment("attachment");  
  $mail->addAddress($to, $nameto);
  return $mail->send();
}

यह एक सम्मोहन की तरह काम करता है


2
आपके उत्तर के लिए धन्यवाद। आपके पास उनके उत्तर में इंगित @norteo जैसा ही सुझाव है। कृपया ध्यान रखें कि v5.2 अपदस्थ है और सुरक्षा अद्यतन प्राप्त नहीं कर रहा है। V6 के लिए आपको सीधे आवश्यकता हो सकती है:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

4

PHP से ईमेल भेजने का मुख्य तरीका इसके अंतर्निहित mail()फ़ंक्शन का उपयोग करना है, लेकिन एसडीके के लिए तैयार होने वाले कुछ जोड़े हैं जो एकीकरण को कम कर सकते हैं:

  1. Swiftmailer
  2. PHPMailer
  3. Pepipost (HTTP पर काम करता है इसलिए SMTP पोर्ट ब्लॉक समस्या से बचा जा सकता है)
  4. मेल भेजे

पुनश्च मैं Pepipost के साथ कार्यरत हूँ।


3
आप Pepipost के साथ कार्यरत हैं और आप Pepipost को no.3 पर रखते हैं। +1
जीनकोड

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

3

आप एक मेल वेब सेवा जैसे Postmark, Sendgrid आदि का उपयोग कर सकते हैं।

Sendgrid बनाम Postmark बनाम Amazon SES और अन्य ईमेल / SMTP API प्रदाता?

संपादित करें: मैं अभी Google Gmail API का उपयोग करता हूं । मुझे सख्त फ़िल्टर के कारण मेरे नियोक्ता के संगठन को अनुस्मारक ईमेल भेजने में परेशानी हुई। लेकिन जब तक आप लोगों को स्पैम नहीं करते हैं, तब तक जीमेल काम करता है।


1

इस स्क्रिप्ट के साथ ईमेल भेजा गया

<h2>Test Mail</h2>
<?php

if (!isset($_POST["submit"]))
  {
  ?>
  <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
  From: <input type="text" name="from"><br>
  Subject: <input type="text" name="subject"><br>
  Message: <textarea rows="10" cols="40" name="message"></textarea><br>
  <input type="submit" name="submit" value="Click To send mail">
  </form>
  <?php
  }

else

  {

  if (isset($_POST["from"]))
    {
    $from = $_POST["from"]; // sender
    $subject = $_POST["subject"];
    $message = $_POST["message"];

    $message = wordwrap($message, 70);

    mail("Test@example.com",$subject,$message,"From: $from\n");
    echo "Thank you for sending an email";
    }
  }
?>

एक बार जब आप ईमेल भेजें बटन दबाते हैं, तो ईमेल Test@example.com पर भेजा जाएगा


1
<?php
include "db_conn.php";//connection file
require "PHPMailerAutoload.php";// it will be in PHPMailer
require "class.smtp.php";// it will be in PHPMailer
require "class.phpmailer.php";// it will be in PHPMailer


$response = array();
$params = json_decode(file_get_contents("php://input"));

if(!empty($params->email_id)){

    $email_id = $params->email_id;
    $flag=false;
    echo "something";
    if(!filter_var($email_id, FILTER_VALIDATE_EMAIL))
    {
        $response['ERROR']='EMAIL address format error'; 
        echo json_encode($response,JSON_UNESCAPED_SLASHES);
        return;
    }
    $sql="SELECT * from sales where email_id ='$email_id' ";

    $result = mysqli_query($conn,$sql);
    $count = mysqli_num_rows($result);

    $to = "demo@gmail.com";
    $subject = "DEMO Subject";
    $messageBody ="demo message .";

    if($count ==0){
        $response["valid"] = false;
        $response["message"] = "User is not registered yet";
        echo json_encode($response);
        return;
    }

    else {

        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->SMTPAuth = true; // authentication enabled
        $mail->IsHTML(true); 
        $mail->SMTPSecure = 'ssl';//turn on to send html email
        // $mail->Host = "ssl://smtp.zoho.com";
        $mail->Host = "p3plcpnl0749.prod.phx3.secureserver.net";//you can use gmail 
        $mail->Port = 465;
        $mail->Username = "demousername@example.com";
        $mail->Password = "demopassword";
        $mail->SetFrom("demousername@example.com", "Any demo alert");
        $mail->Subject = $subject;

        $mail->Body = $messageBody;
        $mail->AddAddress($to);
        echo "yes";

        if(!$mail->send()) {
           echo "Mailer Error: " . $mail->ErrorInfo;
       } 
       else {
           echo "Message has been sent successfully";
      }
    }

}
else{
    $response["valid"] = false;
    $response["message"] = "Required field(s) missing";
    echo json_encode($response);
}


?>

उपरोक्त कोड मेरे लिए काम कर रहा है।

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