Tôi đã cài đặt Ubuntu 11.04, LAMP bằng taskel.
Tôi thấy rằng PHP mail()
không hoạt động.
Tôi cho rằng tôi cần phải kích hoạt nó hoặc cái gì đó? Làm thế nào để làm điều đó?
Tôi đã cài đặt Ubuntu 11.04, LAMP bằng taskel.
Tôi thấy rằng PHP mail()
không hoạt động.
Tôi cho rằng tôi cần phải kích hoạt nó hoặc cái gì đó? Làm thế nào để làm điều đó?
Câu trả lời:
Từ hướng dẫn sử dụng thư của php:
Yêu cầu
Để các chức năng thư có sẵn, PHP yêu cầu một hệ thống email được cài đặt và hoạt động. Chương trình được sử dụng được xác định bởi các cài đặt cấu hình trong tệp php.ini.
Điều này có nghĩa là bạn phải cài đặt một số loại máy chủ và cấu hình php để sử dụng nó. Thông thường mailserver này là postfix trong Ubuntu. Tuy nhiên - nếu phía php mà bạn đang mã hóa cuối cùng sẽ được lưu trữ ở phía dịch vụ lưu trữ (ví dụ: xmission), máy chủ thư rất có thể đã được cài đặt ở đó. Trong trường hợp đó, chỉ cần kiểm tra trang web của bạn trực tuyến thay vì cục bộ.
Nếu bạn cần kiểm tra nó trên hệ thống của riêng bạn hoặc có nghĩa là lưu trữ nó trên máy chủ tại nhà của bạn hơn là tiến hành:
Cài đặt: postfix / sudo apt-get install postfix
Trong quá trình bạn sẽ được hỏi ở chế độ nào bạn muốn cài đặt postfix. Có bốn chế độ có thể:
Phần còn lại của các tùy chọn cài đặt tùy thuộc vào sự lựa chọn của bạn về cấu hình chung này.
Nhiều khả năng bạn sẽ chọn một cài đặt vệ tinh. Điều đó có nghĩa là thư sẽ được gửi bằng nhà cung cấp bên ngoài. Là máy chủ smtp (máy chủ thư đi), sau đó bạn sẽ phải chỉ định nhà cung cấp smtp của mình. Phần còn lại của các tùy chọn là tự giải thích.
Hầu hết các máy chủ smtp yêu cầu xác thực mật khẩu để gửi thư. Vì vậy, postfix sẽ cần phải biết mật khẩu đó. Ngoài ra, có những thứ như mã hóa để xem xét (mà bạn sẽ phải google). Đây là cách bạn định cấu hình postfix bằng xác thực mật khẩu (sasl):
Cài đặt libsasl2-mô-đun và sasl2-bin bằng cách nhấp vào biểu tượng Trung tâm phần mềm hoặc từ thiết bị đầu cuối bằng cách sử dụng:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
Kích hoạt sasl-auth bằng cách thêm các dòng này vào /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
Tạo một tệp /etc/postfix/sasl_password
với một dòng như:
smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
Thay thế mật khẩu thực tế, tên người dùng và địa chỉ smtp.
Cập nhật hậu tố:
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
Bạn có thể phải phá vỡ 'cho phép từ chối' lỗi bởi chown postfix:postfix /etc/postfix
trước đó.
Điều này sẽ làm điều đó trong hầu hết các trường hợp. Tuy nhiên, một số nhà cung cấp smtp yêu cầu một địa chỉ cụ thể là người gửi hoặc mã hóa.
Liên quan: PEAR :: Giao diện thư cũng có thể được bạn quan tâm.
Gmail (và có lẽ các dịch vụ khác) có thể không thích rằng bạn đang cố gửi thư theo cách này vì nó có thể bị coi là không an toàn theo tiêu chuẩn của họ và sẽ chặn nỗ lực của bạn tức là sẽ không có gì xảy ra trên màn hình hoặc ở đâu đó trong toàn bộ quá trình sẽ chặn xác thực của bạn. Ngoài ra, POP3 của bạn phải được bật.
Để truy cập mà xem ở đây. (Nếu bạn muốn ở bên an toàn, thì hãy tạo một tài khoản Gmail giả)
Như đã lưu ý, postfix sẽ là một quá mức nếu bạn chỉ cần gửi email từ php trong khi phát triển các ứng dụng trên máy tính ở nhà của bạn.
Cá nhân tôi sử dụng gói ssmtp rất đơn giản và nhẹ. Nó sẽ sử dụng bất kỳ máy chủ smtp nào để gửi email đi. Cài đặt nó bằng cách chạy:
sudo apt-get install ssmtp
Sau đó chỉnh sửa /etc/ssmtp/ssmtp.conf
tệp, nhận xét dòng mailhub hiện có và thêm các dòng sau (ví dụ này dành cho máy chủ gmail smtp):
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>
(Cung cấp tên người dùng và mật khẩu gmail của bạn. Tất nhiên bạn có thể sử dụng bất kỳ máy chủ SMTP nào khác).
Bây giờ hãy chắc chắn rằng php.ini của bạn đã chính xác sendmail_path
. Nó nên đọc là:
sendmail_path = /usr/sbin/sendmail -t
( Từ ý kiến của @ Dima-l và @ omar-SABIC : Bạn không cần phải chỉ định ssmtp
ở đây vì quá trình cài đặt nên đã tạo ra một liên kết tượng trưng cho /usr/sbin/sendmail
, mà điểm chính xác để ssmtp
Nếu không, bạn phải chỉ định. sendmail_path = /usr/sbin/ssmtp -t
)
Tải lại apache và php của bạn sẽ có thể gửi email đi ngay bây giờ.
sendmail_path = /usr/sbin/ssmtp -t
. Điều này đã có hiệu quả, cảm ơn
/usr/sbin/sendmail
, nó trỏ chính xác đến ssmtp. Vì vậy, sử dụng sendmail_path = /usr/sbin/sendmail -t
cũng nên hoạt động
ssmtp
(tìm thấy một số lưu ý hữu ích): Cách thiết lập thư PHP trong Debian - câu hỏi này + liên kết này đã giúp thiết lập chương trình.
FromLineOverride=YES
để tránh lỗi sau:550 5.7.60 SMTP; Client does not have permissions to send as this sender
PHP yêu cầu một máy khách SMTP để gửi thư. Bạn có thể cài đặt một tác nhân chuyển thư đầy đủ tính năng (MTA) như Postfix để phục vụ chức năng này, nhưng sẽ quá mức nếu bạn chỉ cần gửi thư qua PHP. Thay vào đó, cài đặt msmtp . Nó nhẹ và đơn giản hơn nhiều để cấu hình.
Cài đặt msmtp
sudo apt-get install msmtp-mta ca-certificates
Cấu hình nó
Tạo một tệp cấu hình mới:
sudo vi /etc/msmtprc
... với thông tin cấu hình sau:
# 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
Bạn cần thay thế dữ liệu cấu hình được đại diện bởi mọi thứ trong "<" và ">" (đã bao gồm, xóa những dữ liệu này). Đối với máy chủ / tên người dùng / mật khẩu, hãy sử dụng thông tin đăng nhập bình thường của bạn để gửi thư thông qua nhà cung cấp thư của bạn.
Nói với PHP để sử dụng nó
sudo vi /etc/php5/apache2/php.ini
Thêm dòng duy nhất này:
sendmail_path = /usr/bin/msmtp -t
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Nên là một sửa chữa đơn giản. Bạn chỉ cần cài đặt Postfix thực hiện gửi email thực tế.
sudo apt-get install postfix
Bạn muốn chạy nó từ một thiết bị đầu cuối (chứ không phải trung tâm phần mềm) bởi vì nó cần hỏi bạn một vài câu hỏi thiết lập. Bạn nên tìm cách chấp nhận tất cả các giá trị mặc định (chỉ cục bộ, v.v.).
Đây là một câu hỏi cũ và có câu trả lời xứng đáng ở trên, nhưng tôi cần exim
cho môi trường của tôi. Ngoài ra, xác nhận rằng bạn đã cài đặt sendmail ở vị trí đầu tiên ( $ which sendmail
- nên trả về một cái gì đó như / usr / sbin / sendmail). Tôi đã tìm thấy một hướng dẫn tốt tại linode.com , nhưng ý chính là:
apt-get install exim4-daemon-light mailutils
theo dõi bởi:
dpkg-reconfigure exim4-config
sẽ đưa bạn đến một trình soạn thảo tương tác.
Câu trả lời tuyệt vời , con-f-use.
Tôi có một điều cần nói thêm về "tài khoản gmail giả":
Điều này rất được khuyến khích vì bạn phải định cấu hình tài khoản gmail của mình để cho phép các ứng dụng kém an toàn hơn: https://www.google.com.vn/sinstall/u/0/security/lesssecur Ứng dụng
lại Nếu không, bạn sẽ nhận được "vui lòng đăng nhập bằng trình duyệt web của mình và sau đó thử lại "lỗi trong /var/log/mail.log
tệp của bạn .
Ngoài ra, tôi thấy rằng tôi nhận được một lỗi thời gian chờ trừ khi tôi gửi gmail smtp sever chứng chỉ gốc của tôi. Để làm điều này:
sudo nano /etc/postfix/main.cf
thêm phần sau vào dưới cùng của tập tin
smtp_tls_CAfile = /etc/postfix/cacert.pem
Sau đó sao chép chứng chỉ gốc thawte vào cacert.pem
tệp:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Đây là liên kết tôi đã sử dụng: Định cấu hình Postfix để sử dụng Gmail SMTP trên Ubuntu | EasyEngine
Hy vọng rằng điều này sẽ cứu ai đó một vài nang tóc ...
Tôi thấy các giải pháp được cung cấp bởi Dima L. là cách dễ nhất và nhẹ nhất cho hệ thống.
Chỉ cần một số bổ sung cho rõ ràng hơn về cài đặt. Bạn nên bình luận hostname
trong /etc/ssmtp/ssmtp.conf
tập tin. Các ssmtp.conf
tập tin mẫu như sau:
#
# 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