SMTP सर्वर से PHP के साथ ईमेल भेजना


131
$from = "someonelse@example.com";
$headers = "From:" . $from;
echo mail ("borutflis1@gmail.com" ,"testmailfunction" , "Oj",$headers);

मुझे PHP में ईमेल भेजने में परेशानी है। मैं एक त्रुटि मिलती है: SMTP server response: 530 SMTP authentication is required

मैं इस धारणा के तहत था कि आप सत्यापित करने के लिए एसएमटीपी के बिना ईमेल भेज सकते हैं। मुझे पता है कि यह मेल संभवतः फ़िल्टर कर देगा, लेकिन यह अभी मायने नहीं रखता है।

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = someonelse@example.com

यह php.iniफ़ाइल में सेटअप है । मुझे SMTP कैसे सेट करना चाहिए? क्या कोई SMTP सर्वर है जिसे किसी सत्यापन की आवश्यकता नहीं है या मुझे स्वयं एक सर्वर सेटअप करना चाहिए?

जवाबों:


168

जब आप SMTP प्रामाणिक की आवश्यकता वाले सर्वर के माध्यम से ई-मेल भेज रहे हैं, तो आपको वास्तव में इसे निर्दिष्ट करने की आवश्यकता है, और होस्ट, उपयोगकर्ता नाम और पासवर्ड सेट करें (और शायद बंदरगाह अगर यह डिफ़ॉल्ट एक - 25 नहीं है)।

उदाहरण के लिए, मैं आमतौर पर इस तरह की सेटिंग्स के साथ PHPMailer का उपयोग करता हूं:

$mail = new PHPMailer();

// Settings
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

// Content
$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';

$mail->send();

आप PHPMailer के बारे में और जानकारी यहाँ पा सकते हैं: https://github.com/PHPMailer/PHPMailer


21
PhpMailer के लिए +1 - PHP के mail()फंक्शन में बनाया गया इसका वैकल्पिक व्यक्ति ।
SDC

8
यह इस जवाब पर ठोकर खाने वालों के लिए ध्यान देने योग्य है कि PHPMailer भी वर्डप्रेस में बनाया गया है और 'phpmailer_init'एक्शन हुक का उपयोग करके कॉन्फ़िगर किया जा सकता है । यह SMTP मेल या Amazon SES (जो SMTP कनेक्शन का समर्थन करता है) के लिए वर्डप्रेस सेट करने का एक सुविधाजनक तरीका है।
मैट वैन एंडेल

1
क्या PHP मेलर को पेड स्क्रिप्ट में उपयोग करने की अनुमति है?
लुका

2
@ लुका हां, यह है। उनके लाइसेंस फ़ाइल के अनुसार PHPMailer LGPL 2.1 लाइसेंस का उपयोग करता है, जो वाणिज्यिक उपयोग की अनुमति देता है।
एलेजांद्रो

क्या मुझे इस कोड का उपयोग करने के लिए कुछ विशेष करने की आवश्यकता है? मैं इसे कहां रखूं? क्या मैं इसे POST अनुरोध के साथ HTML5 फॉर्म के साथ कह सकता हूं? इस PHPMailer ऑब्जेक्ट को बनाने के बाद मैं एक ईमेल कैसे भेजूँ?
आरोन फ्रेंके

53
<?php
ini_set("SMTP", "aspmx.l.google.com");
ini_set("sendmail_from", "YOURMAIL@gmail.com");

$message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com";

$headers = "From: YOURMAIL@gmail.com";

mail("Sending@provider.com", "Testing", $message, $headers);
echo "Check your email now....&lt;BR/>";
?>

या, अधिक जानकारी के लिए, पर पढ़ें


मेल भेजने के लिए आप जिस आईपी का उपयोग कर रहे हैं, वह 550-5.7.1 तक अधिकृत नहीं है, सीधे हमारे सर्वर को ईमेल भेजें। मुझे यह त्रुटि मिली। सभी मैं चाहता हूँ एक खुला मेल रिले है।
बोरुत फ्लिस

मेरे पास एक स्थिर आईपी नहीं है। क्या आप किसी भी ओपन मेल रिले के बारे में जानते हैं।
बोरुत फ्लिस

1
इसके अतिरिक्त Google SMTP रिले के लिए support.google.com/a/answer/176600?hl=en देखें ।
fyrye

5
यह Godaddy php mail()function मुद्दों के लिए सबसे अच्छा उत्तर है - 2017 - को PHPMailer या किसी अन्य 3rd पार्टी संसाधन को डाउनलोड नहीं करना चाहिए - धन्यवाद
आत्मिक

4
"READ ON" लिंक टूटा हुआ है
vladkras

46

यूनिक्स उपयोगकर्ताओं के लिए, मेल () वास्तव में ईमेल भेजने के लिए Sendmail कमांड का उपयोग कर रहा है । एप्लिकेशन को संशोधित करने के बजाय, आप पर्यावरण को बदल सकते हैं। msmtp Sendmail संगत CLI सिंटैक्स वाला एक SMTP क्लाइंट है जिसका अर्थ है कि इसे Sendmail के स्थान पर उपयोग किया जा सकता है। यह केवल आपके php.ini में एक छोटे से बदलाव की आवश्यकता है।

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

तब भी नीच मेल () फ़ंक्शन SMTP अच्छाई के साथ काम कर सकता है। यदि आप एप्लिकेशन को संशोधित किए बिना किसी मौजूदा एप्लिकेशन को Sendgrid या mandrill जैसी मौजूदा सेवाओं से कनेक्ट करने का प्रयास कर रहे हैं तो यह बहुत उपयोगी है।


1
महान समाधान, अब कई सर्वरों पर इसका उपयोग करें!
रास

3
मेलिंग लाइब्रेरी का उपयोग नहीं करने वाले ऐप्स के लिए मेरे डॉकर कंटेनरों पर इसे लागू करना।
बटांडवा

वनीला mail()से SMTP का समर्थन करने वाले कुछ के लिए उत्कृष्ट प्रवास पथ । धन्यवाद!
rinogo

MSMTP विंडोज के लिए भी उपलब्ध है। स्पष्ट डाउनलोड में संस्करण 1.4 है। मैंने जो संस्करण पाया वह 1.6.2 है। पता नहीं है कि वहाँ विंडोज के लिए एक 1.8.6 है।
बिल्बो

लेखक ने 2016 फरवरी से पहले विंडोज बायनेरी प्रदान करना बंद कर दिया।
बिल्बो

17

समस्या यह है कि PHP mail()फ़ंक्शन की बहुत सीमित कार्यक्षमता है। PHP से मेल भेजने के कई तरीके हैं।

  1. mail()आपके सिस्टम पर SMTP सर्वर का उपयोग करता है। कम से कम दो सर्वर हैं जो आप विंडोज पर उपयोग कर सकते हैं: hMailServer और xmail । मैंने उन्हें कॉन्फ़िगर करने और उन्हें प्राप्त करने में कई घंटे बिताए। पहले एक मेरी राय में सरल है। अभी, hMailServer विंडोज 7 x64 पर काम कर रहा है।
  2. mail()लिनक्स के साथ रिमोट या वर्चुअल मशीन पर SMTP सर्वर का उपयोग करता है। बेशक, जीमेल जैसी वास्तविक मेल सेवा बिना किसी क्रेडेंशियल या कुंजी के सीधे कनेक्शन की अनुमति नहीं देती है। आप वर्चुअल मशीन सेट कर सकते हैं या अपने LAN में स्थित एक का उपयोग कर सकते हैं। अधिकांश linux distros में बॉक्स से मेल सर्वर होता है। इसे कॉन्फ़िगर करें और मज़े करें। मैं डेबियन 7 पर डिफ़ॉल्ट एक्सिम 4 का उपयोग करता हूं जो इसके लैन इंटरफ़ेस को सुनता है।
  3. मेलिंग लाइब्रेरी डायरेक्ट कनेक्शन का उपयोग करते हैं। Libs स्थापित करना आसान है। मैंने स्विफ्टमेलर का इस्तेमाल किया और यह जीमेल अकाउंट से पूरी तरह से मेल भेजता है। मुझे लगता है कि PHPMailer बहुत अच्छा है।

कोई फर्क नहीं पड़ता कि आपकी पसंद क्या है, मैं आपको कुछ अमूर्त परत का उपयोग करने की सलाह देता हूं। आप अपनी लाइब्रेरी चलाने वाली विंडोज़ पर PHP लाइब्रेरी का उपयोग कर सकते हैं और mail()लिनक्स के साथ उत्पादन मशीन पर काम कर सकते हैं । अमूर्त परत आपको सिस्टम के आधार पर मेल ड्राइवरों को इंटरचेंज करने की अनुमति देती है जो आपका एप्लिकेशन चल रहा है। MyMailerसार send()विधि के साथ सार वर्ग या इंटरफ़ेस बनाएँ । इनहेरिट दो वर्गों MyPhpMailerऔर MySwiftMailersend()उपयुक्त तरीकों से विधि लागू करें ।


17

यहाँ PHP PEAR के साथ करने का एक तरीका है

// Pear Mail Library
require_once "Mail.php";

$from = '<your@mail.com>'; //change this to your email address
$to = '<someone@mail.com>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'your@gmail.com', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

//check mail sent or not
if (PEAR::isError($mail)) {
    echo '<p>'.$mail->getMessage().'</p>';
} else {
    echo '<p>Message successfully sent!</p>';
}

यदि आप Gmail SMTP का उपयोग सेटिंग्स के तहत अपने Gmail खाते में SMTP को सक्षम करने के लिए करते हैं, तो याद रखें

संपादित करें: यदि आप डेबियन / ubuntu पर Mail.php नहीं पा सकते हैं तो आप php-pear को स्थापित कर सकते हैं

sudo apt install php-pear

फिर मेल extention स्थापित करें:

sudo pear install mail
sudo pear install Net_SMTP
sudo pear install Auth_SASL
sudo pear install mail_mime

तो आप इसे require_once "Mail.php" यहाँ स्थित है बस इसे लोड करने में सक्षम होना चाहिए :/usr/share/php/Mail.php


1
requirement_once ('/usr/share/somewhere/Mail.php');

10

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

PHP के अंतर्निहित मेल फ़ंक्शन बहुत सीमित हैं - एसएमटीपी सर्वर को निर्दिष्ट करना केवल वाइंडो में संभव है। * निक्स पर, mail()ओएस के बायनेरिज़ का उपयोग करेगा।

यदि आप नेट पर एक एसएमटीपी सर्वर को ई-मेल भेजना चाहते हैं, तो स्विफ्टमेलर जैसी लाइब्रेरी का उपयोग करने पर विचार करें । उदाहरण के लिए, आप Google मेल के आउटगोइंग सर्वर का उपयोग कर सकेंगे।


2

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

यहाँ कदम हैं:

Msmtp स्थापित करें

sudo apt-get install msmtp-mta ca-certificates

एक नई कॉन्फ़िगरेशन फ़ाइल बनाएं:

sudo nano /etc/msmtprc

... निम्नलिखित कॉन्फ़िगरेशन जानकारी के साथ:

# Set defaults.    
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

आपको "<" और ">" (समावेशी, इन्हें हटाएं) के भीतर सब कुछ द्वारा दर्शाए गए कॉन्फ़िगरेशन डेटा को बदलने की आवश्यकता है। होस्ट / उपयोगकर्ता नाम / पासवर्ड के लिए, अपने मेल प्रदाता के माध्यम से मेल भेजने के लिए अपनी सामान्य साख का उपयोग करें।

PHP को इसका उपयोग करने के लिए कहें

sudo nano /etc/php5/apache2/php.ini

इस एकल पंक्ति को जोड़ें:

sendmail_path = /usr/bin/msmtp -t

पूरा दस्तावेज़ यहाँ पाया जा सकता है:

https://marlam.de/msmtp/


ssmtp भी एक समाधान है (फ्रेंच गाइड) देखें: elliptips.info/guide-debian-7-envoi-de-mails-ligne-de-commande
ıɾuǝʞ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.