Cách sử dụng Gmail hoặc Yahoo với chức năng PHP mail ()
Màu đỏ có nghĩa là gì
Các dòng mà user cần nhập hoặc tùy chỉnh sẽ có màu đỏ trong hướng dẫn này!
Phần còn lại chủ yếu phải là copy-and-paste.
Giới thiệu về thư PHP ()
Hàm mail () trong PHP sử dụng chương trình trong chỉ thị cấu hình sendmail_path để gửi email. Điều này được cài đặt dưới dạng sendmail theo mặc định.
Mặc dù hầu hết các bản cài đặt Linux đều được cài đặt sẵn sendmail, nhưng việc cài đặt bản ghi SPF / PTR, tạo khóa DKIM và nhiều thứ khác đảm bảo rằng email được gửi bởi tập lệnh PHP của bạn không bị gắn cờ là spam. Một ứng dụng client SMTP được gọi là MSMTP được dùng để gửi email bằng server SMTP của bên thứ ba, điều này cũng được dùng bởi thư của PHP () thay cho thư gửi.
Cài đặt
Để cài đặt MSMTP trên Fedora Linux, hãy sử dụng yum :
yum install msmtp
Kho lưu trữ CentOS không có gói RPM cho MSMTP vì vậy ta cần cài đặt nó từ nguồn:
yum install make gcc pkgconfig wget http://sourceforge.net/projects/msmtp/files/msmtp/1. tar -xvf msmtp-1.4.31.tar.bz2 cd msmtp-1.4.31 ./configure make make install4.31/msmtp-1.4.31.tar.bz2/ download
Phiên bản mới nhất là 1.4.31 tại thời điểm viết bài này nhưng nó có thể thay đổi trong tương lai, vì vậy để có version mới nhất, hãy truy cập trang sourceforge này .
Trên bản phân phối Ubuntu / Debian, hãy sử dụng apt-get :
apt-get install msmtp
User Arch Linux:
sudo pacman -S msmtp
Cấu hình MSMTP
Tệp cấu hình của MSMTP được lưu trữ trong ~ / .msmtprc cho mỗi user và / etc / msmtprc là file cấu hình toàn hệ thống. Mở file cấu hình trong folder của bạn.
vi ~/.msmtprc
Thêm các dòng sau cho account Yahoo:
account yahoo tls on tls_starttls off tls_certcheck off auth on host smtp.mail.yahoo.com user user1 from user1@yahoo.com password yourYahooPa5sw0rd
Đối với Gmail, hãy sử dụng các cài đặt sau:
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user user1@gmail.com from user1@gmail.com password yourgmailPassw0rdTệp này cũng có thể có nhiều account , chỉ cần đảm bảo giá trị "tài khoản" là duy nhất cho mỗi phần. Lưu file và sử dụng chmod để chỉ chủ sở hữu có thể đọc file này vì nó chứa password . Bước này là bắt buộc vì msmtp sẽ không chạy nếu quyền nhiều hơn 600 .
chmod 600 ~/.msmtprc
Trước khi thực hiện điều này trong PHP, hãy kiểm tra từ dòng lệnh đảm bảo nó hoạt động bình thường. Để thực hiện việc này, hãy tạo một file văn bản thuần túy chứa một email đơn giản:
echo -e "From: alice@example.com \n\ To: bob@domain.com \n\ Subject: Hello World \n\ \n\ This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt
Bây giờ hãy gửi email này:
cat sample_email.txt | msmtp --debug -a gmail bob@domain.com
Thay thế từ "gmail" bằng "yahoo" hoặc bất cứ thứ gì bạn đã nhập cho tùy chọn "tài khoản". Bạn sẽ thấy nhiều thông báo do tham số "--debug" . Điều này giúp cho việc khắc phục sự cố trở nên dễ dàng nếu mọi thứ không hoạt động như mong đợi. Nếu bob@domain.com nhận được email này, mọi thứ đã được cài đặt chính xác, vì vậy hãy sao chép file này vào folder / etc :
cp -p ~/.msmtprc /etc/.msmtp_php
Thay đổi quyền sở hữu thành tên user mà web server đang chạy. Đây có thể là " apache ", " www-data " hoặc " none " tùy thuộc vào bản phân phối Linux trên VPS và web server của bạn được cài đặt:
chown www-data:www-data /etc/.msmtp_php
Cấu hình PHP
Mở file php.ini , vị trí của file thay đổi tùy theo hệ điều hành và loại PHP được cài đặt (PHP CGI, mod_php, PHP-FPM, v.v.):
vi /etc/php5/php.ini
Tìm dòng sau:
sendmail_path =
Sửa đổi nó bằng cách thêm đường dẫn vào lệnh msmtp:
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"
Tạo thủ công file log và thay đổi quyền sở hữu của nó thành tên user mà web server của bạn đang chạy như:
touch /var/log/msmtp.log chown www-data:www-data /var/log/msmtp.log
Khởi động lại web server của bạn để áp dụng các thay đổi:
service httpd restart
Trong Arch Linux, điều này được thực hiện bằng lệnh systemctl:
systemctl restart httpd
Tùy thuộc vào hệ điều hành và web server của bạn, hãy thay thế " httpd " bằng tên thích hợp. Nếu PHP đang chạy dưới dạng một quy trình riêng biệt (như PHP-FPM), hãy khởi động lại nó thay thế:
service php5-fpm restart
Tạo một tập lệnh PHP với một mail () đơn giản để kiểm tra cài đặt này:
<?php if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function.")) print "Email successfully sent"; else print "An error occured"; ?>
Truy cập file này từ trình duyệt web.
http://www.example.com/file.php
Nếu email này không được gửi, bạn có thể kiểm tra file log msmtp để tìm lỗi.
tail /var/log/msmtp.log
Lỗi thông thường
Nếu email không được gửi khi sử dụng tập lệnh PHP, hãy khắc phục sự cố như sau:
- Kiểm tra xem bạn đã chỉnh sửa đúng file php.ini chưa . Điều này có thể được xác nhận bằng cách tạo một phpinfo (); và kiểm tra phần " Tệp cấu hình đã tải ".
- Đường dẫn đến file cấu hình msmtp có thể sai hoặc web server không có quyền đọc file này.
- Kiểm tra xem email có được gửi hay không bằng cách chạy tập lệnh bằng PHP dòng lệnh:
php /var/www/html/file.php
Các tin liên quan
Cách tạo plugin Nagios với PHP trên Ubuntu 12.102013-04-29
Cách tạo plugin Nagios với PHP trên CentOS 6
2013-04-29