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?
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?
Jawaban:
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 / 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.
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:
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_password
dengan garis seperti:
smtp.gmail.com USERNAME@gmail.com: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/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)
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.conf
file, 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 ssmtp
sini 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.
sendmail_path = /usr/sbin/ssmtp -t
. Ini berhasil, terima kasih
/usr/sbin/sendmail
, yang dengan benar menunjuk ke ssmtp. Jadi, menggunakan sendmail_path = /usr/sbin/sendmail -t
harus bekerja juga
ssmtp
(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
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 <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
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
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
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 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:
apt-get install exim4-daemon-light mailutils
diikuti oleh:
dpkg-reconfigure exim4-config
yang akan membawa Anda ke editor interaktif.
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:
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.pem
file:
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 ...
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 sampel ssmtp.conf
adalah 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
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