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 / 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 dan
sasl2-bin
dengan mengklik ikon Software Center atau dari terminal menggunakan:
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)
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):
(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.
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.
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).
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:
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
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
Jawaban:
Dari manual mail php:
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 /
sudo apt-get install postfix
Selama proses Anda akan ditanya dalam mode mana Anda ingin postfix diinstal. Ada empat mode yang mungkin: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 dan sasl2-bin dengan mengklik ikon Software Center atau dari terminal menggunakan:
Aktifkan sasl-auth dengan menambahkan baris-baris ini ke
/etc/postfix/main.cf
Buat file
/etc/postfix/sasl_password
dengan garis seperti:Ganti kata sandi, nama pengguna, dan alamat smtp yang sebenarnya.
Perbarui postfix:
Anda mungkin harus menghindari 'izin ditolak' bug oleh
chown postfix:postfix /etc/postfix
terlebih 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)
sumber
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:
Kemudian edit
/etc/ssmtp/ssmtp.conf
file, beri komentar pada baris mailhub yang ada dan tambahkan baris berikut (contoh ini untuk server smtp gmail):(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:( Dari komentar @ dima-l dan @ omar-sabic : Anda tidak harus menentukan di
ssmtp
sini karena instalasi seharusnya membuat symlink untuk/usr/sbin/sendmail
, yang menunjuk dengan benarssmtp
. Kalau tidak, Anda harus menentukansendmail_path = /usr/sbin/ssmtp -t
)Muat ulang apache dan php Anda seharusnya dapat mengirim email keluar sekarang.
sumber
sendmail_path = /usr/sbin/ssmtp -t
. Ini berhasil, terima kasih/usr/sbin/sendmail
, yang dengan benar menunjuk ke ssmtp. Jadi, menggunakansendmail_path = /usr/sbin/sendmail -t
harus bekerja jugassmtp
(menemukan beberapa catatan berguna): Cara Mengatur PHP mail di Debian - pertanyaan ini + tautan ini membantu mengatur program.FromLineOverride=YES
untuk menghindari kesalahan berikut:550 5.7.60 SMTP; Client does not have permissions to send as this sender
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
Konfigurasikan itu
Buat file konfigurasi baru:
... dengan informasi konfigurasi berikut:
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
Tambahkan baris ini:
sumber
cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Seharusnya perbaikan sederhana. Anda hanya perlu menginstal Postfix yang melakukan email sebenarnya.
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).
sumber
Ini adalah pertanyaan lama dan ada jawaban yang layak di atas, tetapi saya perlu
exim
untuk 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:diikuti oleh:
yang akan membawa Anda ke editor interaktif.
sumber
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.log
file Anda .juga saya menemukan bahwa saya mendapatkan kesalahan batas waktu kecuali saya mengirim smtp gmail sertifikat root saya. Untuk melakukan ini:
tambahkan berikut ini ke bagian bawah file
Kemudian salin sertifikat root thawte ke
cacert.pem
file:Berikut ini tautan yang saya gunakan: Konfigurasi Postfix untuk Menggunakan SMTP Gmail di Ubuntu | EasyEngine
Semoga ini menghemat seseorang beberapa folikel rambut ...
sumber
Saya menemukan solusi yang diberikan oleh Dima L. adalah cara termudah & ringan untuk sistem.
Hanya beberapa tambahan untuk kejelasan pengaturan. Anda harus berkomentar
hostname
dalam/etc/ssmtp/ssmtp.conf
file. File sampelssmtp.conf
adalah sebagai berikut:sumber