Ngu ngơ học làm web (90) - Gửi email

Tiếp theo của: Ngu ngơ học làm web (89) - Cookie
-----

Phần 90.       Gửi email


Đây là clip số 105:


Cấu hình XAMPP để gửi email từ local bằng hàm mail của PHP.

Cấu hình trong tập tin php.ini tại đường dẫn: \xampp\php\php.ini. Cấu hình các mục sau:

extension=php_sockets.dll
extension=php_openssl.dll
sendmail_path ="\"D:\xampp\sendmail\sendmail.exe\" -t"

Cấu hình các thông tin sau trong tập tin sendmail.ini tại đường dẫn: \xampp\sendmail\sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=ssl
default_domain=localhost
error_logfile=error.log
debug_logfile=debug.log
auth_username=xxx@gmail.com //tên một hộp thư gmail hợp lệ, dùng email này để gửi  
auth_password: //mật khẩu của hộp thư gmail ở trên
hostname=localhost

Sau khi cấu hình xong các thông tin ở trên, nhớ restart XAMPP để nó cập nhật các giá trị vừa mới sửa đổi.

Sử dụng hàm mail của PHP để gửi email, cú pháp của hàm mail:

mail($to, $subject, $message, $header)

- $to: địa chỉ email người nhận

- $subject: tiêu đề của email

- $message: nội dung email

- $header: chứa các thông tin cấu hình, quản lý, ví dụ CC, BCC,

Hàm mail sẽ trả về giá trị “true” nếu thành công (tuy không chắc chắn đã gửi tới được đích, chỉ là đã hoàn thành việc gửi email) và trả về giá trị “false” nếu thất bại.

Ví dụ,

<?php
  $to = 'xxx@gmail.com'; //tên hộp thư nhận email
  $subject = 'test mail';
  $message = 'content of email';
  $header = 'from:abc@gmail.com';

  if (mail($to, $subject, $message, $header)) {
    echo 'thanh cong';
  } else {
    echo 'that bai';
  }
?>

Khi chạy đoạn mã trên có thể gặp lỗi này (xem trong tập tin error.log):

<https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbvH<EOL>wU53sSUsUXEeZdJHMkRcAQ6aFlQw1-bVfd5aoAM4_SkZO7MVd4cdG5AjdBe_SddXY8wIa0<EOL>-iwKTdED2cqWKVm1HgM7j9EbLJalYKEL6ef9TgP9GBx2jCLNZFt2YewbAlbSiANnxmgppz<EOL>sdvUxQddYoj4i8ByN82r61aZy7A22GHiM39P8-wt11VQIeCjwOkMuaoT8tHNiclxnjUhFK<EOL>2bVvAk8Bs_uQnl92J2xtKFr1NqVdk> Please log in via your web browser and<EOL>then try again.<EOL> Learn more at<EOL> https://support.google.com/mail/answer/78754 r9sm11864905pgp.78 - gsmtp<EOL>

Lỗi trên là do email của gmail được bảo mật, nên không cho ứng dụng được phép truy cập vào để gửi email, kết quả là ứng dụng web sẽ bị lỗi. Nghĩa là ‘Allow less secure apps’ đang ở chế độ OFF, cần chuyển sang chế độ ON để chạy được đoạn mã và kiểm tra. Sau đó nhớ chuyển email về lại chế độ OFF để đảm bảo an toàn cho hộp thư.

Đăng nhập vào hộp thư gmail, sau đó bấm vào link này để chuyển hộp thư sang chế độ ít an toàn: 


Muốn gửi email tới nhiều người, chỉ việc thêm hộp thư đến vào biến $to, ví dụ,

$to = 'xxx@gmail.com, yyy@gmail.com';

Nếu muốn gửi email mà phần nội dung có kèm theo thẻ HTML, thì trong header thêm thuộc tính Content-type: text/html, ví dụ,

  $message = '<h3 style="color: red">content of email<h3>';
  $header = 'from:abc@gmail.com' . "\r\n";
  $header .= 'Content-type: text/html';   

Để gửi Cc và Bcc, chỉ cần thêm thông tin vào $header, ví dụ,

$header = 'from:abc@gmail.com' . "\r\n";
  $header .= 'Content-type: text/html' . "\r\n";

  $header .= 'Cc: xyz@gmail.com';
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm: