Benim PHP posta göndermek nasıl?


Yanıtlar:


51

Php'nin posta kılavuzundan:

Gereksinimler

Posta işlevlerinin kullanılabilir olması için PHP, yüklü ve çalışan bir e-posta sistemi gerektirir. Kullanılacak program php.ini dosyasındaki yapılandırma ayarları ile tanımlanır.

Bu, bir çeşit posta sunucusu kurmanız ve onu kullanmak için php yapılandırmanız gerektiği anlamına gelir. Genellikle bu posta sunucusu Ubuntu'da bir postfix'dir. Bununla birlikte - kodladığınız php tarafı sonunda bir barındırma servisinin tarafında saklanacaksa (örneğin, xmission), bir posta sunucusu büyük olasılıkla oraya zaten kurulmuş olacaktır. Bu durumda sitenizi yerel olarak değil, çevrimiçi olarak test edin.

Bunu kendi sisteminizde test etmeniz veya devam etmek yerine kendi ev sunucunuzda barındırmak istediğinizde:

Postfix Kurulumu

Kurulum: postfix Postfix'i yükle / sudo apt-get install postfix İşlem sırasında size postfix'in hangi modda yüklenmesini istediğinizi soracaksınız. Dört olası mod vardır:

  • İnternet : Kendi posta sunucunuz.
  • Uydu : Posta göndermek ve almak için harici bir posta sağlayıcısı (örneğin Google) kullanılacaktır. Sunucu hiçbir posta almayacak.
  • Smarthost : İkisi arasındaki karışım. Posta yerel olarak saklanır ancak harici bir posta sağlayıcısı aracılığıyla gönderilir.
  • Sadece yerel : Seni ilgilendirmez. Bu bir sistem stajyer posta sunucusu. Yalnızca kullanıcıdan kullanıcıdan kullanıcıya posta gönderebilirsiniz.

Yükleme seçeneklerinin geri kalanı, bu genel yapılandırma seçiminize bağlıdır.

Büyük olasılıkla bir uydu kurulumu seçeceksiniz. Bu, postaların harici bir sağlayıcı kullanılarak gönderileceği anlamına gelir. Smtp sunucusu olarak (giden posta sunucusu), sağlayıcılarınızı smtp olarak belirtmeniz gerekir. Seçeneklerin geri kalanı açıklayıcıdır.

Kurulum Sonrası Yapılandırma

Çoğu smtp sunucusu posta göndermek için parola doğrulaması gerektirir. Yani postfix bu şifreyi bilmeniz gerekecek. Ayrıca, dikkate alınması gereken şifreleme gibi şeyler de var (ki bu google’ın kullanılması gerekecek). Parola doğrulamayı (sasl) kullanarak postfix'i şu şekilde yapılandırabilirsiniz:

  • Software Center simgeleri ile veya kullanarak terminali kullanarak libsasl2-module Libsasl2 modüllerini kurun ve sasl2- bin'i kurun Sasl2-bin yükleyin:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Bu satırları ekleyerek sasl-auth komutunu etkinleştirin. /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
    
  • Şunun /etc/postfix/sasl_passwordgibi bir satırda bir dosya oluşturun :

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

    Gerçek şifreyi, kullanıcı adını ve smtp adresini değiştirin.

  • Güncelleme posta eki:

     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   
    

    Sen aşmak gerekebilir 'inkar izni' hata ile chown postfix:postfix /etc/postfixönceden.

Bu çoğu durumda yapmalı. Ancak bazı smtp sağlayıcıları gönderen veya şifreleme olarak belirli bir adrese ihtiyaç duyar.

İlgili: PEAR :: Mail arayüzü de ilginizi çekebilir.

Gmail (ve belki de diğer hizmetler), bu şekilde posta göndermeye çalıştığınızdan, standartlarına göre güvensiz sayılabileceğinden hoşunuza gitmeyebilir ve girişimi engeller; Kimlik doğrulama Ayrıca POP3'ünüz de etkinleştirilmelidir.

Burada görmek için karşı. (Güvenli tarafta olmak istiyorsanız, sahte bir Gmail hesabı oluşturun)


Ubuntu (yerel) eserlerinden posta gönderme. Fakat ya Windows’un bu makineyi posta göndermek için kullanmasını istersem (PHP) Bunu nasıl yapılandırabilirim?
JM, İşyerinde

Soruyu anladığımdan emin değilim. Ubuntu makinenizden zımpara yapabilirsiniz. Şimdi yapmak istediğin, Windows PC'nizden php ile o Ubuntu makinesi üzerinden mal göndermek mi? Bu doğru mu?
con-f-use

2
Şimdi libsasl2 paketi mevcut değil. 11.04 kullanıyorum. Onun libsasl2-2 güncellenmiş paket başına kadar ..
mythicalcoder

61

Daha önce belirtildiği gibi, ev bilgisayarınızda uygulamalar geliştirirken sadece php'den e-posta göndermeniz gerekiyorsa, postfix overkill olacaktır.

Şahsen çok basit ve hafif bir paket ssmtp kullanıyorum. Giden e-postaları göndermek için herhangi bir smtp sunucusunu kullanacaktır. Çalıştırarak yükleyin:

sudo apt-get install ssmtp

Ardından /etc/ssmtp/ssmtp.confdosyayı düzenleyin , mevcut mailhub satırına yorum yapın ve aşağıdaki satırları ekleyin (bu örnek gmail smtp sunucusu içindir):

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

(Gmail kullanıcı adınızı ve şifrenizi girin. Elbette herhangi bir SMTP sunucusunu kullanabilirsiniz).

Şimdi php.ini dosyanızın doğru olduğundan emin olun sendmail_path. Olarak okumalısınız:

sendmail_path = /usr/sbin/sendmail -t

( @ Dima-l ve @ omar-sabic yorumlarından : ssmtpBurada belirtmeniz gerekmez, çünkü kurulum için /usr/sbin/sendmaildoğru şekilde işaret eden bir sembolik bağlantı oluşturmalıydı ssmtp. Aksi takdirde belirtmeniz gerekir sendmail_path = /usr/sbin/ssmtp -t)

Apache'yi yeniden yüklerseniz, php'niz şimdi giden e-postaları gönderebilmelidir.


3
Sanırım demek istedin sendmail_path = /usr/sbin/ssmtp -t. Bu çalıştı, teşekkürler
Ömer Sabiç

1
ssmtp /usr/sbin/sendmail, doğru bir şekilde ssmtp'ye işaret eden bir sembolik bağlantı oluşturmalıdır . Yani, kullanma sendmail_path = /usr/sbin/sendmail -tda çalışması gerekir
Dima L.

2
Yapılandırma hakkında daha fazla bilgi ssmtp(bazı yararlı notlar bulabilirsiniz): Debian'da PHP postası kurma - bu soru + bu bağlantı programı kurmaya yardımcı oldu.
gskema

1
Gmail için, google hesabınızı "güvenli olmayan uygulamaların" çalışması için izin verecek şekilde yapılandırmanız gerektiğini düşünün. Bkz support.google.com/accounts/answer/6010255
aesede

1
Ayrıca şu satırı da eklemek zorunda kaldım: FromLineOverride=YESAşağıdaki hatayı önlemek için:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons

29

PHP, posta göndermek için bir SMTP istemcisi gerektirir. Bu işlevi yerine getirmek için Postfix gibi bir tam özellikli posta aktarma aracısı (MTA) yükleyebilirsiniz , ancak yalnızca PHP üzerinden posta göndermeniz gerekiyorsa, bu aşırıya kaçar. Bunun yerine, msmtp'yi yükleyin . Yapılandırmak için hafif ve çok basit.

Msmtp'yi yükle

sudo apt-get install msmtp-mta ca-certificates

Yapılandır

Yeni bir yapılandırma dosyası oluşturun:

sudo vi /etc/msmtprc

... aşağıdaki yapılandırma bilgileriyle:

# 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

"<" Ve ">" dahilindeki her şey tarafından temsil edilen yapılandırma verilerini değiştirmeniz gerekir (bunları da dahil edin). Ana bilgisayar / kullanıcı adı / şifre için, posta sağlayıcınızdan posta göndermek için normal bilgilerinizi kullanın.

PHP'ye kullanmasını söyle

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

Bu tek satırı ekle:

sendmail_path = /usr/bin/msmtp -t

Tabii ki, 'sudo vi /etc/php5/conf.d' php.ini olmadan çalışmaz. Benim durumumda (Ubuntu), '/etc/php5/apache2/php.ini' dosyasını düzenlemek zorunda kaldım ve çalışabilmesi için 'sudo /etc/init.d/apache2 reload' komutunu da yeniden başlattım.
Dejan

1
Btw, kullanarak msmtprc config test edebilirsiniz:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan

Güzel olurdu, ama benim için çalışmıyor. Günlüğünde hiçbir şey görünmüyor. Tamamen iyi görünüyor, ama zar yok.
James T Snell

2
Msmtp'nin sistem genelinde kullanılabilmesi için "msmtp-mta" yükleyin.
colan,

1
Aşağıdaki talimatlarda benim gibi değişmez olması durumunda, aslında <> parantezlerini config dosyasında tutmazsınız. Bunu anlamak için bana iyi bir 20 dakika sürdü
de Raad

4

Basit bir düzeltme olmalı. Sadece asıl e-postayı yapan Postfix'i kurmanız gerekir.

sudo apt-get install postfix

Bunu bir terminalden (yazılım merkezinden değil) çalıştırmak istiyorsunuz, çünkü size birkaç kurulum sorusu sorması gerekiyor. Tüm varsayılanları (yalnızca yerel, vb.) Kabul etmek için bulunmanız gerekir.


2

Bu eski bir soru ve yukarıda cevabım çok değerli cevaplar var, fakat çevrem eximiçin gerekli olan şeyler vardı . Ayrıca, ilk önce sendmail'in yüklü olduğunu onaylayın ( $ which sendmail- / usr / sbin / sendmail gibi bir şey döndürmelidir). Linode.com'da iyi bir rehber buldum , ama esas şey:

apt-get install exim4-daemon-light mailutils

bunu takiben:

dpkg-reconfigure exim4-config

sizi etkileşimli bir editöre ulaştırır.


1

Harika cevap , con-f-use.

"Sahte gmail hesabı" hakkında ekleyeceğim bir şey var:

Bu, şiddetle tavsiye edilir, çünkü gmail hesabınızı daha az güvenli uygulamalara izin verecek şekilde yapılandırmanız gerekir: https://www.google.com/settings/u/0/security/lesssecureapps Aksi takdirde "lütfen web tarayıcınızı kullanarak giriş yapın ve sonra tekrar deneyin " /var/log/mail.logdosyanızda hata .

Ayrıca, gmail smtp sunucusuna kök sertifikamı göndermezsem, zaman aşımı hatası alıyorum. Bunu yapmak için:

sudo nano /etc/postfix/main.cf

aşağıdakileri dosyanın altına ekleyin

smtp_tls_CAfile = /etc/postfix/cacert.pem

Sonra çözülme kök sertifikasını cacert.pemdosyaya kopyalayın :

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

İşte kullandığım bağlantı: Postfix'i Ubuntu'da Gmail SMTP Kullanacak Şekilde Yapılandırma | EasyEngine

Umarım bu birkaç kişiyi saç köklerinden kurtarır ...


0

Dima L.'nin sağladığı çözümleri , sisteme en kolay ve en hafif yöntem olarak buldum .

Ayar konusunda daha fazla netlik için sadece bazı ekler. Yorum yapmak gerektiğini hostnamede /etc/ssmtp/ssmtp.confdosyaya. Örnek ssmtp.confdosya aşağıdaki gibidir:

#
# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.