मेरा PHP मेल कैसे भेजें?


71

मैंने Ubuntu 11.04, LAMP को कार्यस्थल का उपयोग करके स्थापित किया।

मुझे लगता है कि PHP mail()काम नहीं करता है।

मुझे लगता है कि मुझे इसे सक्षम करने की आवश्यकता है या कुछ और? मैं उसको कैसे करू?


यह आपके जीमेल से भेजने के लिए सरल और आसान है। kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

जवाबों:


51

Php के मेल मैनुअल से:

आवश्यकताएँ

उपलब्ध होने वाले मेल फ़ंक्शंस के लिए, PHP को एक स्थापित और काम करने वाले ईमेल सिस्टम की आवश्यकता होती है। उपयोग किए जाने वाले प्रोग्राम को php.ini फ़ाइल में कॉन्फ़िगरेशन सेटिंग्स द्वारा परिभाषित किया गया है।

इसका मतलब है कि आपको इसे उपयोग करने के लिए किसी प्रकार के मेलस्वर को स्थापित करना होगा और php को कॉन्फ़िगर करना होगा। आमतौर पर यह मेलस्वर उबंटू में पोस्टफिक्स होता है। हालाँकि - यदि आप जिस php साइड को कोडिंग कर रहे हैं, वह अंततः एक होस्टिंग सेवा के किनारे (जैसे xmission) पर स्टोर किया जाएगा, तो एक मेल सर्वर सबसे पहले ही वहां स्थापित हो जाएगा। उस स्थिति में स्थानीय रूप से अपनी साइट का ऑनलाइन परीक्षण करें।

यदि आपको इसे अपने सिस्टम पर परीक्षण करने की आवश्यकता है या इसका मतलब यह है कि इसे अपने ही घर-सर्वर पर होस्ट करने के लिए आगे बढ़ें:

उपसर्ग स्थापना

स्थापना: पोस्टफिक्स पोस्टफ़िक्स स्थापित करें / sudo apt-get install postfix प्रक्रिया के दौरान आपसे पूछा जाएगा कि आप किस मोड में पोस्टफिक्स इंस्टॉल करना चाहते हैं। चार संभावित तरीके हैं:

  • इंटरनेट : आपका अपना मेल-सर्वर।
  • सैटेलाइट : एक बाहरी मेल प्रदाता (जैसे Google) का उपयोग मेल भेजने और प्राप्त करने के लिए किया जाएगा। सर्वर को कोई मेल प्राप्त नहीं होगा।
  • स्मार्तोस्ट : दोनों के बीच मिश्रण। मेल को स्थानीय रूप से संग्रहीत किया जाता है लेकिन बाहरी मेल प्रदाता के माध्यम से भेजा जाता है।
  • केवल स्थानीय : आपको चिंता नहीं होगी। यह एक सिस्टम इंटर्न मेलस्वर है। आप केवल सिस्टम पर उपयोगकर्ता से उपयोगकर्ता को मेल भेज सकते हैं।

इंस्टॉल के बाकी विकल्प इस सामान्य कॉन्फ़िगरेशन की आपकी पसंद पर निर्भर करते हैं।

सबसे अधिक संभावना है कि आप एक उपग्रह इंस्टॉल चुनेंगे। इसका मतलब है कि एक बाहरी प्रदाता का उपयोग करके मेल भेजा जाएगा। Smtp-server (आउटगोइंग मेल सर्वर) के रूप में आपको अपने प्रदाताओं को smtp निर्दिष्ट करना होगा। बाकी विकल्प आत्म व्याख्यात्मक हैं।

स्थापना कॉन्फ़िगरेशन पोस्ट करें

अधिकांश smtp- सर्वर को मेल भेजने के लिए एक पासवर्ड प्रमाणीकरण की आवश्यकता होती है। तो पोस्टफिक्स को उस पासवर्ड को जानना होगा। इसके अलावा विचार करने के लिए एन्क्रिप्शन जैसी चीजें हैं (जो आपको Google को देनी होंगी)। पासवर्ड प्रमाणीकरण (sasl) का उपयोग करके आप पोस्टफ़िक्स को कॉन्फ़िगर कैसे करते हैं:

  • सॉफ़्टवेयर केंद्र आइकन पर क्लिक करके या टर्मिनल का उपयोग करके libsasl2- मॉड्यूल Libsasl2- मॉड्यूल स्थापित करें और sasl2-bin स्थापित करें Sasl2-bin स्थापित करें:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • इन पंक्तियों को जोड़कर sasl-SSL सक्षम करें /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • /etc/postfix/sasl_passwordएक लाइन के साथ एक फ़ाइल बनाएँ :

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    वास्तविक पासवर्ड, उपयोगकर्ता नाम और smtp-address पता।

  • अद्यतन उपसर्ग:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    आप नाकाम करने के लिए हो सकता है 'अनुमति नहीं दी' बग द्वारा chown postfix:postfix /etc/postfixपहले से।

ऐसा ज्यादातर मामलों में करना चाहिए। फिर भी कुछ smtp प्रदाताओं को प्रेषक या एन्क्रिप्शन के रूप में एक विशिष्ट पते की आवश्यकता होती है।

संबंधित: PEAR :: मेल इंटरफ़ेस भी आप के लिए ब्याज की हो सकती है।

जीमेल (और शायद अन्य सेवाएं) यह पसंद नहीं कर सकते हैं कि आप इस तरह से मेल भेजने का प्रयास कर रहे हैं क्योंकि यह उनके मानकों द्वारा असुरक्षित समझा जा सकता है, और आपके प्रयास को अवरुद्ध करेगा अर्थात स्क्रीन पर कुछ भी नहीं होगा या पूरी प्रक्रिया का कोई स्थान अवरुद्ध होगा। आपका प्रमाणीकरण। साथ ही आपका POP3 सक्षम होना चाहिए।

यह देखने के लिए यहां देखें। (यदि आप सुरक्षित पक्ष में रहना चाहते हैं, तो एक डमी जीमेल खाता बनाएं)


उबंटू (स्थानीय) कार्यों से मेल भेजना। लेकिन क्या होगा अगर मैं चाहता हूं कि मेरा विंडोज मेल (PHP भी) भेजने के लिए इस मशीन का उपयोग करे? मैं उसे कैसे कॉन्फ़िगर करूं?
काम

यकीन नहीं होता कि मुझे सवाल मिल गया है। आप अपने उबंटू मशीन से रेत कर सकते हैं। अब आप क्या करना चाहते हैं कि आपके विंडोज पीसी से php के माध्यम से उस Ubuntu मशीन के माध्यम से माल भेजना है? क्या वो सही है?
कॉन-एफ-

2
अब पैकेज libsasl2 मौजूद नहीं है। मैं 11.04 का उपयोग कर रहा हूं। अद्यतन पैकेज के अनुसार इसका libsasl2-2 ..
पौराणिक

61

जैसा कि पहले ही उल्लेख किया गया है, यदि आपके होम कंप्यूटर पर एप्लिकेशन विकसित करते समय आपको केवल php से ईमेल भेजने की आवश्यकता होती है, तो पोस्टफिक्स एक ओवरकिल होगा।

मैं व्यक्तिगत रूप से बहुत ही सरल और हल्के पैकेज ssmtp का उपयोग करता हूं। यह आउटबाउंड ईमेल भेजने के लिए किसी भी smtp सर्वर का उपयोग करेगा। इसे चलाकर स्थापित करें:

sudo apt-get install ssmtp

फिर /etc/ssmtp/ssmtp.confफ़ाइल संपादित करें , मौजूदा मेलहब लाइन पर टिप्पणी करें और निम्नलिखित पंक्तियाँ जोड़ें (यह उदाहरण gmail smtp सर्वर के लिए है):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

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

अब सुनिश्चित करें कि आपका php.ini सही है sendmail_path। इसे इस प्रकार पढ़ना चाहिए:

sendmail_path = /usr/sbin/sendmail -t

( @ Dima-l और @ omar-sabic की टिप्पणियों से : आपको ssmtpयहां निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि इंस्टॉलेशन के लिए एक सिमलिंक बनाना चाहिए /usr/sbin/sendmail, जो सही ढंग से इंगित करता है ssmtp। अन्यथा आपको निर्दिष्ट करना होगा sendmail_path = /usr/sbin/ssmtp -t)

पुनः लोड करें अपाचे और आपका php अब आउटगोइंग ईमेल भेजने में सक्षम होना चाहिए।


3
मुझे लगता है कि आपका मतलब था sendmail_path = /usr/sbin/ssmtp -t। यह काम किया, धन्यवाद
ओमेर सबिक

1
ssmtp को सिम्लिंक बनाना चाहिए /usr/sbin/sendmail, जो ssmtp को सही ढंग से इंगित करता है। तो, का उपयोग कर के sendmail_path = /usr/sbin/sendmail -tरूप में अच्छी तरह से काम करना चाहिए
डेमा एल।

2
कॉन्फ़िगर करने के बारे में अधिक ssmtp(कुछ उपयोगी नोट्स मिले): डेबियन में PHP मेल कैसे सेट करें - यह सवाल + इस लिंक ने प्रोग्राम को सेट करने में मदद की।
gskema

1
जीमेल के लिए विचार करें कि आपको अपने Google खाते को "असुरक्षित एप्लिकेशन" को काम करने की अनुमति देने के लिए कॉन्फ़िगर करना होगा। देखें support.google.com/accounts/answer/6010255
aesede

1
मुझे निम्नलिखित पंक्ति को भी जोड़ना था: FromLineOverride=YESनिम्नलिखित त्रुटि से बचने के लिए:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons

29

PHP को मेल भेजने के लिए SMTP क्लाइंट की आवश्यकता होती है। आप इस फ़ंक्शन को पूरा करने के लिए पोस्टफ़िक्स की तरह एक पूर्ण विशेषताओं वाला मेल ट्रांसफर एजेंट (MTA) स्थापित कर सकते हैं , लेकिन यह ओवरकिल है यदि आपको केवल PHP के माध्यम से मेल भेजने की आवश्यकता है। इसके बजाय, msmtp स्थापित करें । यह हल्का और कॉन्फ़िगर करने के लिए बहुत सरल है।

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

sudo apt-get install msmtp-mta ca-certificates

इसे कॉन्फ़िगर करें

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

sudo vi /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 vi /etc/php5/apache2/php.ini

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

sendmail_path = /usr/bin/msmtp -t

बेशक, php.ini के बिना 'sudo vi /etc/php5/conf.d' काम नहीं करेगा। मेरे मामले में (उबंटू), मुझे '/etc/php5/apache2/php.ini' को संपादित करना था और इसे काम करने के लिए अपाचे 'sudo /etc/init.d/apache2 रीलोड' को भी पुनः आरंभ करना था।
देजन

1
BTW, आप अपने msmtprc विन्यास का उपयोग कर परीक्षण कर सकते हैं:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan

अच्छा होगा, लेकिन यह मेरे लिए काम नहीं कर रहा है। इसके लॉग में कुछ भी नहीं दिखता है। यह पूरी तरह से ठीक लगता है, लेकिन कोई पासा नहीं।
जेम्स टी स्नेल ने

2
Msmtp उपलब्ध सिस्टम-वाइड बनाने के लिए, "msmtp-mta" स्थापित करें।
कॉलन डे

1
यदि आप निम्नलिखित निर्देशों में मेरे जैसे एक बहुत शाब्दिक हैं, तो आप वास्तव में <> कोष्ठक को विन्यास फाइल में नहीं रखते हैं। मुझे यह पता लगाने के लिए एक अच्छा 20 मिनट लगा कि
de Raad

4

एक साधारण फिक्स होना चाहिए। आपको केवल पोस्टफ़िक्स को स्थापित करने की आवश्यकता है जो वास्तविक ईमेलिंग करता है।

sudo apt-get install postfix

आप इसे टर्मिनल से चलाना चाहते हैं (और सॉफ्टवेयर सेंटर नहीं) क्योंकि इसमें आपसे कुछ सेटअप सवाल पूछने की जरूरत है। आपको केवल सभी चूक (स्थानीय-केवल, आदि) को स्वीकार करना चाहिए।


2

यह एक पुराना सवाल है और ऊपर योग्य जवाब हैं, लेकिन मुझे eximअपने पर्यावरण की आवश्यकता है। इसके अलावा, पुष्टि करें कि आपके पास पहले से इंस्टॉल किया हुआ ईमेल है ( $ which sendmail- कुछ वापस करना चाहिए जैसे / usr / sbin / sendmail)। मुझे linode.com पर एक अच्छा गाइड मिला , लेकिन जिस्ट है:

apt-get install exim4-daemon-light mailutils

के बाद:

dpkg-reconfigure exim4-config

जो आपको एक इंटरेक्टिव एडिटर के लिए मिलेगा।


1

शानदार जवाब , कॉन-एफ-यूज़।

मुझे "डमी जीमेल खाते" के बारे में जोड़ने के लिए एक बात है:

यह अत्यधिक अनुशंसित है क्योंकि आपको कम सुरक्षित अनुप्रयोगों की अनुमति देने के लिए अपने जीमेल खाते को कॉन्फ़िगर करना होगा : https://www.google.com/settings/u/0/security/lesssecureapps अन्यथा आपको "कृपया अपने वेब ब्राउज़र का उपयोग करके लॉग इन करना होगा" और फिर अपनी /var/log/mail.logफ़ाइल में फिर से "त्रुटि" का प्रयास करें ।

मुझे यह भी पता चला कि मुझे टाइमआउट त्रुटि तब तक मिलती है जब तक कि मैं gmail smtp नहीं भेज दूं मेरा रूट सर्टिफिकेट गंभीर हो जाता है। यह करने के लिए:

sudo nano /etc/postfix/main.cf

फ़ाइल के नीचे करने के लिए निम्न जोड़ें

smtp_tls_CAfile = /etc/postfix/cacert.pem

फिर thawte root सर्टिफिकेट को cacert.pemफाइल में कॉपी करें :

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

यहाँ लिंक का उपयोग किया गया है: Ubuntu पर SMTP का उपयोग करने के लिए पोस्टफ़िक्स को कॉन्फ़िगर करें | EasyEngine

उम्मीद है कि यह किसी को कुछ बाल follicles बचाता है ...


0

मैंने पाया कि Dima L द्वारा प्रदान किया गया समाधान सिस्टम का सबसे आसान तरीका और हल्का है।

बस सेटिंग पर अधिक स्पष्टता के लिए कुछ जोड़। आपको फ़ाइल hostnameमें टिप्पणी करनी चाहिए /etc/ssmtp/ssmtp.conf। नमूना ssmtp.confफ़ाइल नीचे दी गई है:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.