Cách gửi Email bằng hàm PHP mail()
⚡ Tóm tắt thông minh
Hàm `mail` trong PHP là một hàm tích hợp sẵn cho phép gửi email trực tiếp từ một script PHP bằng cách sử dụng cài đặt SMTP của máy chủ. Hướng dẫn này sẽ bao gồm cú pháp và tham số của hàm `mail()`, cấu hình SMTP trong `php.ini`, lọc dữ liệu đầu vào của người dùng bằng `filter_var`, gửi email an toàn và sử dụng PHP.Mailer để đảm bảo giao hàng đáng tin cậy.

Thư PHP là gì?
PHP mail là hàm tích hợp sẵn của PHP được sử dụng để gửi email từ các script PHP.
Hàm mail chấp nhận các tham số sau:
- Địa chỉ email
- Tiêu Đề
- Tin nhắn
- Địa chỉ email CC hoặc BCC
Tại sao và khi nào nên sử dụng PHP mail
Chức năng gửi thư rất hữu ích trong nhiều trường hợp:
- Đây là một cách 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 để gửi email có chứa nội dung được cung cấp.
- Các nhà phát triển có thể sử dụng nó để nhận thông báo lỗi hệ thống qua email.
- Bạn có thể sử dụng nó để gửi email cho những người đăng ký nhận bản tin của bạn.
- Bạn có thể sử dụng nó để gửi liên kết đặt lại mật khẩu cho người dùng khi họ quên mật khẩu.
- Bạn có thể sử dụng nó để gửi email chứa các liên kết kích hoạt và xác nhận. Điều này rất hữu ích khi đăng ký người dùng và xác minh địa chỉ email của họ.
Gửi thư bằng PHP
Hàm gửi email trong PHP có cú pháp cơ bản như sau.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
ĐÂY,
- “$to_email_address” là địa chỉ email của người nhận thư
- “$subject” là tiêu đề email
- “$message” là tin nhắn được gửi đi.
- “[$headers]” là tùy chọn; nó có thể được sử dụng để bao gồm thông tin như CC và BCC.
- CC là viết tắt của carbon copy (bản sao). Nó được sử dụng khi bạn muốn gửi một bản sao cho người có liên quan, ví dụ: một email khiếu nại gửi đến một công ty cũng có thể được gửi kèm bản sao (CC) cho ban giải quyết khiếu nại.
- BCC là viết tắt của "blind carbon copy" (bản sao ẩn). Nó tương tự như CC, nhưng địa chỉ email được thêm vào mục BCC sẽ không hiển thị cho những người nhận khác.
Đơn giản Mail Transmission Giao thức (SMTP)
PHP mail sử dụng Simple Mail Transmission Giao thức (SMTP) để gửi thư.
Trên máy chủ lưu trữ, các cài đặt SMTP đã được thiết lập sẵn.
Bạn có thể cấu hình các thiết lập thư SMTP từ tệp “php.ini” trong thư mục cài đặt PHP.
Để cấu hình cài đặt SMTP trên máy chủ cục bộ của bạn, giả sử bạn đang sử dụng XAMPP. WindowsTìm tệp “php.ini” trong thư mục “C:\xampp\php”.
- Mở tệp đó bằng Notepad hoặc bất kỳ trình soạn thảo văn bản nào khác. Trong ví dụ này, chúng ta sẽ sử dụng Notepad. Nhấp vào menu Chỉnh sửa.
- Nhấp vào menu Tìm kiếm…
- Hộp thoại Tìm kiếm sẽ xuất hiện.
- Nhấp vào nút Tìm tiếp theo
Tìm các mục nằm dưới [chức năng thư]. Các dòng mặc định thường trông như thế này:
- ; SMTP = máy chủ cục bộ
- ; smtp_port = 25
Xóa dấu chấm phẩy trước SMTP và smtp_port, và đặt SMTP thành địa chỉ của bạn. Máy chủ SMTP và cổng SMTP của bạn. Cài đặt của bạn sẽ trông như sau:
- SMTP = smtp.example.com
- smtp_port = 25
Lưu ý: Bạn có thể lấy cài đặt SMTP từ nhà cung cấp dịch vụ lưu trữ web của mình. Nếu máy chủ yêu cầu xác thực, hãy thêm các dòng sau:
- auth_username = example_username@example.com
- auth_password = ví dụ_password
Lưu các thay đổi mới và khởi động lại. Apache máy chủ.
PHP Mail Ví dụ
Bây giờ chúng ta hãy xem một ví dụ về việc gửi một email đơn giản.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
Đầu ra:
Lưu ý: ví dụ trên chỉ sử dụng 4 tham số bắt buộc. Bạn nên thay thế địa chỉ email giả định ở trên bằng một địa chỉ email thật.
Vệ sinh thông tin đầu vào của người dùng email
Ví dụ trên sử dụng các giá trị được mã hóa cứng trong mã nguồn cho địa chỉ email và các chi tiết khác để đơn giản hóa.
Giả sử bạn cần tạo một biểu mẫu liên hệ, nơi người dùng điền thông tin chi tiết và sau đó gửi đi.
- Người dùng có thể vô tình hoặc cố ý chèn mã vào phần tiêu đề, dẫn đến việc gửi thư rác.
- Để bảo vệ hệ thống của bạn khỏi những cuộc tấn công như vậy, bạn có thể tạo một hàm tùy chỉnh để khử trùng và xác thực các giá trị trước khi gửi thư.
Chúng ta hãy tạo một hàm tùy chỉnh để xác thực và làm sạch địa chỉ email bằng cách sử dụng hàm tích hợp filter_var. Hàm filter_var được sử dụng để làm sạch và xác thực dữ liệu do người dùng nhập vào.
Nó có cú pháp cơ bản như sau.
<?php filter_var($field, SANITIZATION_TYPE); ?>
ĐÂY,
- “filter_var(…)” là chức năng xác thực và dọn dẹp
- “$field” là giá trị của trường cần lọc.
- “SANITIZATION_TYPE” là loại khử trùng sẽ được thực hiện trên hiện trường, ví dụ như:
- BỘ LỌC_XÁC_ĐỊNH_EMAIL – Trả về true cho các địa chỉ email hợp lệ và false cho các địa chỉ email không hợp lệ.
- BỘ LỌC_VỆ SINH_EMAIL – Loại bỏ các ký tự không hợp lệ khỏi địa chỉ email, do đó địa chỉ có các ký tự thừa sẽ được rút gọn thành info@domain.com.
- FILTER_SANITIZE_URL – loại bỏ các ký tự bất hợp pháp khỏi URLđể lại một địa chỉ sạch như https://www.example.com.
- FILTER_SANITIZE_STRING – Loại bỏ các thẻ khỏi giá trị chuỗi, vì vậy "am bold" trở thành "am bold". Lưu ý rằng bộ lọc này đã lỗi thời trong PHP 8.1; hãy sử dụng htmlspecialchars() thay thế.
Đoạn mã dưới đây sử dụng một hàm tùy chỉnh để gửi thư bảo mật.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $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"; } ?>
Đầu ra:
Bảo mật Mail
Email có thể bị chặn trong quá trình truyền tải bởi người nhận không mong muốn.
Điều này có thể khiến nội dung email bị lộ cho những người không mong muốn.
Thư bảo mật giải quyết vấn đề này bằng cách transmitGửi email qua kết nối được mã hóa bằng SSL hoặc TLS, ví dụ như SMTP qua SSL trên cổng 465 hoặc STARTTLS trên cổng 587.
Mã hóa làm xáo trộn thông điệp trước khi gửi, do đó chỉ máy chủ thư của người nhận dự định mới có thể đọc được nó.
PHPMailer: Một giải pháp thay thế tốt hơn cho mail()
Đối với các ứng dụng thực tế, hầu hết các nhà phát triển đều sử dụng PHP.Mailsử dụng thư viện er thay vì hàm mail() thô. PHPMailHệ thống xác thực thông qua máy chủ SMTP bên ngoài, giúp cải thiện đáng kể khả năng gửi email và đơn giản hóa việc gửi tệp đính kèm cũng như email HTML.
Cài đặt nó bằng Composer, sau đó gửi thư qua kết nối SMTP được xác thực và mã hóa như hình bên dưới.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
So sánh với mail(), PHPMailNó cung cấp cho bạn xác thực SMTP, mã hóa tích hợp, hỗ trợ tệp đính kèm và xử lý lỗi rõ ràng hơn, đó là lý do tại sao nó là lựa chọn được khuyến nghị cho email trong môi trường sản xuất.






