Thứ sáu, 02/08/2013 | 00:00 GMT+7

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.4.31/msmtp-1.4.31.tar.bz2/download
tar -xvf msmtp-1.4.31.tar.bz2
cd msmtp-1.4.31
./configure
make
make install

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 yourgmailPassw0rd
Tệ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

Tags:

Các tin liên quan

Cách tạo plugin Nagios với PHP trên Ubuntu 12.10
2013-04-29
Cách tạo plugin Nagios với PHP trên CentOS 6
2013-04-29