PHP: Sử dụng hàm mail() để gửi email trong PHP

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Mục Lục:

1. Giới thiệu PHP mail()

PHP mail() là một hàm PHP được tích hợp sẵn sử dụng để gửi email. Bài viết này sẽ hướng dẫn bạn cấu hình SMTP, gửi demo email và hướng dẫn làm sạch, xác thực dữ liệu trước khi gửi email.

Hàm mail() chấp nhận các tham số sau:

  • Email address (địa chỉ email)
  • Subject (tiêu đề email)
  • Message (nội dung email)
  • CC hoặc BC

Một số tác dụng của việc dùng hàm mail():

  • Tiết kiệm chi phí để thông báo cho người dùng về các sự kiện quan trọng.
  • Cho phép người dùng liên hệ với bạn qua email bằng cách cung cấp biểu mẫu liên hệ trên trang web.
  • Các Lập trình viên có thể sử dụng nó để nhận lỗi hệ thống qua email.
  • Gửi email cho người đăng ký bản tin trên website PHP.
  • Gửi liên kết đặt lại mật khẩu cho người dùng nếu họ quên mật khẩu.
  • Gửi email liên kết kích hoạt/xác nhận, thường là khi đăng ký tài khoản người dùng cần phải xác minh địa chỉ email của họ.

2. Cách sử dụng hàm mail()

2.1. Gửi mail bằng PHP

Hàm PHP mail() có cú pháp cơ bản sau:

mail($địa_chỉ_email_nhận, $tiêu_đề_email, $nội_dung_email, [$header], [$các_tùy_chọn_khác]);

Trong đó:

  • $header: là tham số tùy chọn, nó có thể được sử dụng để bổ sung thông tin như cc, bcc.

Lưu ý, trong Email ký hiệu:

  • cc: Là cho phép chia sẻ email đến nhiều người khác. Tất cả mọi người có trong phần cc đều nhìn thấy nhau.
  • bcc: Là cho phép chia sẻ email đến nhiều người khác. Mọi người có trong phần bcc sẽ không nhìn thấy nhau.

2.2. Hướng dẫn cấu hình Giao thức truyền đơn giản (SMTP)

PHP mailer, sử dụng Giao thức truyền đơn giản (Simple Mail Tranmission Protocol hay còn viết tắt là SMTP) để gửi email.

Trên máy chủ, SMTP cần phải được cài đặt sẵn sàng.

Các cài đặt SMTP mail có thể được cấu hình từ tệp tin php php.ini trong thư mục cài đặt PHP.

Để cấu hình (configuring) SMTP trên localhost, giả sử ta đang sử dụng xampp trên windows, thì ta hãy xác định vị trí của tập tin php.ini trong thư mục C:\\xampp\php.

Ta mở nó bằng notepad hoặc bất kỳ text editor nào để biên tập lại. Trong ví dụ này thì ta sẽ tạo mới bằng cách click chọn vào menu edit như hình dưới đây:

Hướng dẫn cấu hình SMTP (B1)

Click chuột phải, chọn Find... 

Hộp thoại sẽ xuất hiện.

Điền mail function rồi click vào nút Find Next.

Trong file ta có:

  • [mail function]
  • ; SMTP = localhost
  • ; smtp_port = 25

Xóa dấu chấm phẩy trước SMTP và smtp_port và đặt SMTP vào máy chủ smtp của bạn và port thành port smtp của bạn. Cài đặt của bạn sẽ như sau:

  • SMTP = smtp.example.com
  • smtp_port = 25

Lưu ý rằng cài đặt SMTP có thể được lấy từ các nhà cung cấp dịch vụ lưu trữ web của bạn.

  • auth_username = example_username@example.com
  • auth_password = example_password
  • Lưu lại thay đổi
  • Khởi động lại Apache server.

2.3. Hướng dẫn gửi email qua ví dụ về hàm mail()

Bây giờ, hãy xem thử một ví dụ đơn giản:

<?php

    $to_email = 'name@company.com';

    $subject = 'Testing PHP Mail';

    $message = 'This mail is sent using the PHP mail function';

    $headers = 'From: noreply@company.com';

    mail($to_email, $subject, $message, $headers);

?>

Kết quả nhận được là:

Kết quả sau gửi thử email bằng hàm mail()

Kết quả sau gửi thử email bằng hàm mail()

Chú ý: Ví dụ trên chỉ có 4 tham số bắt buộc. Bạn nên thay thế email gửi và email nhận thật để thử nghiệm.

3. Làm sạch Email đầu vào của người dùng bằng hàm filter_var

Ví dụ trên sử dụng các giá trị được lập trình cứng trong code về địa chỉ email và các chi tiết khác để đơn giản.

Bây giờ, giả sử bạn phải tạo một biểu mẫu "Liên hệ với chúng tôi" để người dùng điền thông tin chi tiết và sau đó bấm gửi.

  • Người dùng có thể vô tình hoặc cố ý tiêm mã đểu vào các trường có thể nhập dẫn đến việc gửi thư rác.
  • Để bảo vệ hệ thống của bạn khỏi các cuộc tấn công như vậy, bạn có thể tạo một chức năng tùy chỉnh làm sạch và xác thực các giá trị trước khi thư được gửi.

Chúng ta thử tùy chỉnh một function để xác thực dữ liệu và làm sạch địa chỉ email với hàm filter_var được dựng sẵn.

Hàm filter_var được sử dụng để vệ sinh và xác thực dữ liệu đầu vào của người dùng.

Nó có cú pháp như sau:

<?php
    filter_var($field, SANITIZATION TYPE);
?>

Giải thích cú pháp hàm filter_var:

  • filter_var() là hàm làm sạch và xác nhận dữ liệu
  • $fied là giá trị của trường chưa được lọc
  • SANITIZATION TYPE là kiểu làm sạch.

Trong đó, SANITIZATION TYPE bao gồm các tùy chọn:

  • FILTER_VALIDATE_MAIL trả về true nếu địa chỉ email là hợp lệ và false nếu địa chỉ email không hợp lệ
  • FILTER_STANITIZE_MAIL loại bỏ các ký tự không hợp lệ như là: info\@domain.(com) trả về info@domain.com
  • FILTER_STANTIZE_ URL loại bỏ các ký tự không hợp lệ từ URL như là http://www.example@.comé trả về http://www.example@.com
  • FILTER_STANTIZE_ STRING loại bỏ các thẻ từ các chuỗi như <b>am bold</b> trả về am bold.

Đoạn code dưới đây thực hiện sử dụng một function tùy chỉnh để gửi email an toàn.

<?php
    function sanitize_my_email($field) {
        // Loại bỏ ký tự không hợp lệ
        $field = filter_var($field, FILTER_SANITIZE_EMAIL);
 
        // Xác thực Email
        if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
            return true;
        } else {
            return false;
        }
    }
 
    $to_email = 'name@company.com';
    $subject = 'Testing PHP Mail';
    $message = 'This mail is sent using the PHP mail ';
    $headers = 'From: noreply@company.com';
 
    // Kiểm tra xem địa chỉ nhận có hợp lệ không
    $secure_check = sanitize_my_email($to_email);
    if ($secure_check == false) {
        echo "Invalid input";
    } else { //send email 
        mail($to_email, $subject, $message, $headers);
        echo "This email is sent using PHP Mail";
    }
?>

Kết quả nhận được là:

Kết quả sau gửi thử email bằng hàm mail()

Kết quả sau gửi thử email bằng hàm mail() đã được làm sạch bằng hàm filter_var   Một số lưu ý khi làm việc với email:

  • Email có thể bị chặn trong quá trình truyền bởi những người nhận ngoài ý muốn.
  • Có thể hiển thị nội dung của email cho người nhận ngoài ý muốn.
  • Bảo mật email giải quyết vấn đề này bằng cách truyền email qua Bảo mật Giao thức Truyền Siêu văn bản (HTTPS). 
  • HTTPS mã hóa tin nhắn trước khi gửi chúng.
» Tiếp: Cách upload ảnh
« Trước: Một số câu hỏi khi phỏng vấn
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!