Bagaimana cara saya mengirim surat PHP?

71

Saya menginstal Ubuntu 11.04, LAMP menggunakan tasksel.

Saya menemukan bahwa PHP mail()tidak berfungsi.

Saya kira saya perlu mengaktifkannya atau sesuatu? Bagaimana aku melakukan itu?

JM di Tempat Kerja
sumber
Ini sederhana dan mudah dikirim dari gmail Anda. kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

Jawaban:

51

Dari manual mail php:

Persyaratan

Agar fungsi surat tersedia, PHP memerlukan sistem email yang diinstal dan berfungsi. Program yang akan digunakan ditentukan oleh pengaturan konfigurasi dalam file php.ini.

Ini berarti Anda harus menginstal semacam server surat dan mengkonfigurasi php untuk menggunakannya. Biasanya server surat ini adalah postfix di Ubuntu. Namun - jika sisi php yang Anda kodekan pada akhirnya akan disimpan di sisi layanan hosting (mis. Xmission), server surat kemungkinan besar sudah diinstal di sana. Jika demikian, cukup uji situs Anda secara online, bukan secara lokal.

Jika Anda perlu mengujinya di sistem Anda sendiri atau bermaksud meng-host-nya di server-rumah Anda sendiri daripada melanjutkan dengan:

Instalasi Postfix

Instalasi: postfix Instal postfix / sudo apt-get install postfix Selama proses Anda akan ditanya dalam mode mana Anda ingin postfix diinstal. Ada empat mode yang mungkin:

  • Internet : Server surat Anda sendiri.
  • Satelit : Penyedia surat luar (mis. Google) akan digunakan untuk mengirim dan menerima surat. Server tidak akan menerima surat apa pun.
  • Smarthost : Campuran antara keduanya. Mail disimpan secara lokal tetapi dikirim melalui penyedia email eksternal.
  • Hanya lokal : Tidak akan menjadi masalah Anda. Itu adalah server surat intern sistem. Anda hanya dapat mengirim email dari pengguna ke pengguna di sistem.

Opsi instalasi lainnya bergantung pada pilihan Anda untuk konfigurasi umum ini.

Kemungkinan besar Anda akan memilih instalasi satelit. Itu berarti surat akan dikirim menggunakan penyedia eksternal. Sebagai smtp-server (server surat keluar) Anda harus menentukan penyedia smtp Anda. Sisa opsi cukup jelas.

Konfigurasi Pemasangan Pasca

Sebagian besar smtp-server memerlukan otentikasi kata sandi untuk mengirim email. Jadi postfix perlu mengetahui kata sandi itu. Juga ada hal-hal seperti enkripsi yang perlu dipertimbangkan (yang harus Anda miliki untuk google). Ini adalah bagaimana Anda mengonfigurasi postfix menggunakan otentikasi kata sandi (sasl):

  • Instal libsasl2-modules Instal libsasl2-modules dan sasl2-bin Instal sasl2-bin dengan mengklik ikon Software Center atau dari terminal menggunakan:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Aktifkan sasl-auth dengan menambahkan baris-baris ini ke /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
    
  • Buat file /etc/postfix/sasl_passworddengan garis seperti:

     smtp.gmail.com [email protected]:USERPASSWORD
    

    Ganti kata sandi, nama pengguna, dan alamat smtp yang sebenarnya.

  • Perbarui postfix:

     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   
    

    Anda mungkin harus menghindari 'izin ditolak' bug oleh chown postfix:postfix /etc/postfixterlebih dahulu.

Ini harus dilakukan dalam sebagian besar kasus. Namun beberapa penyedia smtp memerlukan alamat khusus sebagai pengirim atau enkripsi.

Terkait: PEAR :: Antarmuka surat mungkin juga menarik bagi Anda.

Gmail (dan mungkin layanan lain) mungkin tidak suka bahwa Anda berusaha mengirim surat dengan cara ini karena dapat dianggap tidak aman oleh standar mereka, dan akan memblokir upaya Anda yaitu tidak akan terjadi apa pun di layar atau di mana seluruh proses akan memblokir otentikasi Anda. POP3 Anda juga harus diaktifkan.

Untuk mengatasi itu lihat di sini. (Jika Anda ingin berada di sisi aman, buat akun Gmail dummy)

membingungkan
sumber
Mengirim email dari Ubuntu (lokal) berfungsi. Tetapi bagaimana jika saya ingin Windows saya menggunakan mesin ini untuk mengirim email (PHP juga)? Bagaimana cara mengkonfigurasi itu?
JM at Work
Tidak yakin saya mendapatkan pertanyaan. Anda dapat mengampelas dari mesin Ubuntu Anda. Sekarang yang ingin Anda lakukan adalah mengirim mal melalui mesin Ubuntu itu dari PC Windows Anda melalui php? Apakah itu benar?
con-f-use
2
Sekarang paket libsasl2 tidak ada. Saya menggunakan 11,04. Its libsasl2-2 per paket diperbarui ..
mythicalcoder
61

Seperti yang sudah disebutkan, postfix akan menjadi kerja keras jika Anda hanya perlu mengirim email dari php saat mengembangkan aplikasi di komputer di rumah Anda.

Saya pribadi menggunakan paket ssmtp yang sangat sederhana dan ringan. Ini akan menggunakan server smtp untuk mengirim email keluar. Instal dengan menjalankan:

sudo apt-get install ssmtp

Kemudian edit /etc/ssmtp/ssmtp.conffile, beri komentar pada baris mailhub yang ada dan tambahkan baris berikut (contoh ini untuk server smtp gmail):

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

(Berikan nama pengguna & kata sandi gmail Anda. Tentu saja Anda dapat menggunakan server SMTP lainnya).

Sekarang pastikan bahwa php.ini Anda sudah benar sendmail_path. Itu harus dibaca sebagai:

sendmail_path = /usr/sbin/sendmail -t

( Dari komentar @ dima-l dan @ omar-sabic : Anda tidak harus menentukan di ssmtpsini karena instalasi seharusnya membuat symlink untuk /usr/sbin/sendmail, yang menunjuk dengan benar ssmtp. Kalau tidak, Anda harus menentukan sendmail_path = /usr/sbin/ssmtp -t)

Muat ulang apache dan php Anda seharusnya dapat mengirim email keluar sekarang.

Dima L.
sumber
3
Saya pikir Anda maksud sendmail_path = /usr/sbin/ssmtp -t. Ini berhasil, terima kasih
Omer Sabic
1
ssmtp harus membuat symlink untuk /usr/sbin/sendmail, yang dengan benar menunjuk ke ssmtp. Jadi, menggunakan sendmail_path = /usr/sbin/sendmail -tharus bekerja juga
Dima L.
2
Lebih lanjut tentang mengkonfigurasi ssmtp(menemukan beberapa catatan berguna): Cara Mengatur PHP mail di Debian - pertanyaan ini + tautan ini membantu mengatur program.
gskema
1
Untuk gmail, pertimbangkan Anda harus mengonfigurasi akun google Anda untuk memungkinkan "aplikasi tidak aman" agar berfungsi. Lihat support.google.com/accounts/answer/6010255
aesede
1
Saya juga harus menambahkan baris berikut: FromLineOverride=YESuntuk menghindari kesalahan berikut:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons
29

PHP membutuhkan klien SMTP untuk mengirim email. Anda dapat menginstal agen transfer surat berfitur lengkap (MTA) seperti Postfix untuk melayani fungsi ini, tetapi itu berlebihan jika Anda hanya perlu mengirim email melalui PHP. Sebagai gantinya, instal msmtp . Ini ringan dan jauh lebih sederhana untuk dikonfigurasi.

Instal msmtp

sudo apt-get install msmtp-mta ca-certificates

Konfigurasikan itu

Buat file konfigurasi baru:

sudo vi /etc/msmtprc

... dengan informasi konfigurasi berikut:

# 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 <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

Anda perlu mengganti data konfigurasi yang diwakili oleh semua yang ada di dalam "<" dan ">" (inklusif, hapus ini). Untuk host / nama pengguna / kata sandi, gunakan kredensial normal Anda untuk mengirim email melalui penyedia email Anda.

Beri tahu PHP untuk menggunakannya

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

Tambahkan baris ini:

sendmail_path = /usr/bin/msmtp -t
colan
sumber
Tentu saja, 'sudo vi /etc/php5/conf.d' tanpa php.ini tidak akan berfungsi. Dalam kasus saya (Ubuntu), saya harus mengedit '/etc/php5/apache2/php.ini' dan juga me-restart apache 'sudo /etc/init.d/apache2 reload' agar dapat berfungsi.
Dejan
1
BTW, Anda dapat menguji konfigurasi msmtprc Anda menggunakan:cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Dejan
Akan menyenangkan, tetapi itu tidak berhasil untuk saya. Tidak ada yang muncul di log-nya. Tampaknya benar-benar baik-baik saja, tetapi tidak ada dadu.
James T Snell
2
Untuk membuat msmtp tersedia di seluruh sistem, instal "msmtp-mta".
colan
1
Jika Anda terlalu literal seperti saya dalam mengikuti instruksi, Anda tidak benar-benar menyimpan tanda kurung <> dalam file konfigurasi. Butuh waktu 20 menit untuk memikirkannya
de Raad
4

Seharusnya perbaikan sederhana. Anda hanya perlu menginstal Postfix yang melakukan email sebenarnya.

sudo apt-get install postfix

Anda ingin menjalankannya dari terminal (dan bukan pusat perangkat lunak) karena perlu menanyakan beberapa pertanyaan pengaturan. Anda seharusnya menemukan untuk hanya menerima semua default (hanya lokal, dll).

Oli
sumber
2

Ini adalah pertanyaan lama dan ada jawaban yang layak di atas, tetapi saya perlu eximuntuk lingkungan saya. Juga, konfirmasikan bahwa Anda telah menginstal sendmail sejak awal ( $ which sendmail- harus mengembalikan sesuatu seperti / usr / sbin / sendmail). Saya menemukan panduan yang bagus di linode.com , tetapi intinya adalah:

apt-get install exim4-daemon-light mailutils

diikuti oleh:

dpkg-reconfigure exim4-config

yang akan membawa Anda ke editor interaktif.

vrobinson
sumber
1

Jawaban bagus , gunakan con-f.

Saya punya satu hal untuk ditambahkan tentang "akun gmail dummy":

Ini sangat disarankan karena Anda harus mengonfigurasi akun gmail Anda untuk memungkinkan aplikasi yang kurang aman: https://www.google.com/settings/u/0/security/lesssecureapps. Jika tidak, Anda akan mendapatkan "silakan masuk menggunakan peramban web Anda dan kemudian coba lagi "kesalahan dalam /var/log/mail.logfile Anda .

juga saya menemukan bahwa saya mendapatkan kesalahan batas waktu kecuali saya mengirim smtp gmail sertifikat root saya. Untuk melakukan ini:

sudo nano /etc/postfix/main.cf

tambahkan berikut ini ke bagian bawah file

smtp_tls_CAfile = /etc/postfix/cacert.pem

Kemudian salin sertifikat root thawte ke cacert.pemfile:

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

Berikut ini tautan yang saya gunakan: Konfigurasi Postfix untuk Menggunakan SMTP Gmail di Ubuntu | EasyEngine

Semoga ini menghemat seseorang beberapa folikel rambut ...

deputy_D
sumber
0

Saya menemukan solusi yang diberikan oleh Dima L. adalah cara termudah & ringan untuk sistem.

Hanya beberapa tambahan untuk kejelasan pengaturan. Anda harus berkomentar hostnamedalam /etc/ssmtp/ssmtp.conffile. File sampel ssmtp.confadalah sebagai berikut:

#
# 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
[email protected]
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
SD.
sumber