Làm thế nào để gửi email bằng PHP

Làm thế nào để gửi email bằng PHP

Gần như bất kỳ dự án kinh doanh nào cũng cần có email và gửi email cho khách hàng hoặc đối tác. Mặc dù có nhiều loại email hosting doanh nghiệp khác nhau, như Hostinger, Zoho Mail, và Google Workspace, bạn cũng có thể gửi email bằng PHP.

Trong bài hướng dẫn này, bạn sẽ học cách gửi email bằng PHP mail() function có sẵn và PHPMailer với giao thức Simple Mail Transfer Protocol (SMTP).

PHP mail() function có thể được dùng để gửi email sử dụng PHP. Nó thuận tiện nếu bạn muốn tạo form liên hệ trên website của bạn. Với PHP mail(), emails có thể được gửi sử dụng script PHP đơn giản.

Gửi email bằng PHP mail() Function

PHP mail() function kích hoạt chương trình Sendmail, thường được cấu hình bởi system admin. Chương trình này giúp bạn gửi email được.

Để dùng được hàm này, hãy chắc là nhà cung cấp của bạn cho phép bạn chỉnh chức năng Sendmail service.

Các bước gửi email hàm PHP mail() như sau:

Bước 1 – Kích hoạt dịch vụ Sendmail

Nếu bạn đang dùng web hosting của Hostinger hoặc WordPress hosting, bạn có thể kích hoạt hoặc vô hiệu function này trong hPanel. Nhấn vào Emails -> Mail Service Control.

Sử dụng dịch vụ Mail Service Control trong hPanel.

Mặc định, Sendmail service đã được kích hoạt. Bạn có thể kiểm tra lại cho chắc.

kích hoạt dịch vụ gửi email sendmail

Bước 2 — Tạo một file PHP mới

Đầu tiên, bạn cần tạo file PHP trong tài khoản hosting. Để file của bạn có thể truy cập bằng địa chỉ web, bạn cần mua tên miền web, kết nối nó tới hosting và upload file PHP vào trong thư mục public_html.

  1. Truy cập vào File Manager trong hPanel hoặc qua FTP client.
  2. Tạo mới tên file có tên testmail.php bằng nút Add New trong File Manager
    Tạo file testmail.php trong public_html.
  3. Double click vào file và copy dán đoạn code này vào trong file testmail.php. Chúng tôi sẽ sử dụng đoạn code này để gửi email và sẽ giải thích cho bạn ở sau:
    <?php
        ini_set( 'display_errors', 1 );
        error_reporting( E_ALL );
        $from = "test@hostinger-tutorials.com";
        $to = "test@hostinger.com";
        $subject = "Checking PHP mail";
        $message = "PHP mail works just fine";
        $headers = "From:" . $from;
        mail($to,$subject,$message, $headers);
        echo "The email message was sent.";
    ?>
  4. Sau khi lưu lại file trên. Bạn có thể truy cập tenmiencuaban/testmail.php từ trên trình duyệt để chạy script. Nhớ thay đổi chỗ tenmiencuaban thành tên miền của bạn.
  5. Email bạn nhắm đến sẽ nhận được tin nhắn bạn gửi:
    thư mục của người nhận nhận được email kiểm thử

Hiểu thêm về các thành phần trong PHP Mail

Như đã hứa, chúng tôi sẽ giới thiệu bạn các thành phần cơ bản của một mail script PHP. Ví dụ này là chúng tôi tạo một cú pháp email cơ bản để bạn hiểu nó hoạt động như thế nào cụ thể.

Tuy nhiên, nếu bạn muốn biết thêm thông tin chức năng của Sendmail và các components của nó, bạn có thể xem qua bộ tài liệu PHP chính thức.

Đây là PHP syntax chúng tôi đã dùng ở phần trước:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

Cùng xem qua cụ thể về từng dòng một:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

2 dòng đầu tiên là bật tính năng hiện lỗi để bạn thấy lỗi nếu có. Chúng sẽ báo lỗi nếu script thực thi thất bại.

$from = "test@hostinger-tutorials.com";

$from – Email gửi từ. Nhiều nhà cung cấp không cho phép sử dụng email address tùy ý vì lý do nó có thể bị lạm dung làm spoofing. Nên bạn cần điền email address bạn đã tạo cho tên miền này ở đây để thực thi PHP mail thành công.

$to = "test@gmail.com";

$to – Email người nhận. Khi bạn gửi đi cho mục đích kiểm tra, hãy dùng email cá nhân của bạn để thử.

$subject = "Checking PHP mail";

$subject – Tiêu đề email

$message = "PHP mail works just fine";

$message – Đây là chỗ bạn điền nội dung của email vào

$headers = "From:" . $from;

$headers – Mỗi email có headers. Chúng bao gồm những thông tin như là email gửi từ, địa chỉ email để trả lời (reply-to address)

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

mail($to,$subject,$message, $headers) – Đây là hàm PHP để chạy lệnh gửi email. Bạn không nên thay đổi gì trong dòng này.

echo "The email message was sent.";

echo “The email message was sent.” – PHP function echo sẽ hiển thị thông báo trên màn hình là script đã được thực thi thành công.

Sử dụng PHPMailer để gửi email

PHPMailer là thư viện phổ biến để gửi mail trong PHP. Nó hỗ trợ gửi email bằng hàm mail() hoặc Simple Mail Transfer Protocol (SMTP). Thư viện này đơn giản quá trình phức tạp xây dựng một PHP mail bằng cách cho bạn dùng một bộ các function để tạo và gửi email

Cài PHPMailer cũng rất dễ, đặc biệt nếu bạn đã có sẵn Composer. Nếu bạn đang dùng Hostinger, bạn không phải lo về việc này nữa vì nó đã được cài sẵn trong mọi gói hosting.

Nếu bạn muốn cài đặt PHPMailer thủ công, bạn có thể kết nối tới hosting qua SSH terminal bằng các bước sau:

  1. Tải và cài đặt PuTTY SSH client.
  2. Vào giao diện thành viên hPanel, tìm và nhấn vào mục SSH Access trong phần Advanced.
  3. Lưu lại thông tin SSH Access Information. Bạn sẽ cần các thông tin SSH IP address, port, username, và password.
  4. Mở PuTTy, rồi đặt SSH IP và port tương ứng.
    cấu hình PuTTY SSH.
  5. Nhấn Open và một cửa sổ lệnh sẽ hiện ra. Gõ SSH usernamepassword. Sau khi hoàn tất, nhấn Enter.

    GHI CHÚ: PuTTY sẽ KHÔNG hiện dấu nháy khi nhập pass. Bạn đừng lo mà cứ gõ đúng password là được.

  6. Thực hiện lệnh sau:
    cd public_html
    
  7. Nhấn Enter, rồi chạy lệnh:
    composer require phpmailer/phpmailer
  8. Wait for a moment until the installation process is finished. tiến trình cài đặt PHPMailer.

Sử dụng PHPMailer để gửi email với Hostinger SMTP

Khi bạn đã có PHPMailer sẵn, bạn có thể dùng nó để gửi PHP mails bằng Hostinger SMTP.

  1. Tạo một tài khoản email bằng cách truy cập hPanel, chuyển tới Email Account -> Create a New Email Account. Điền thông tin email mới và đặt mật khẩu và nhấn Create.tạo email trong Hostinger hPanel.
  2. Sau khi hoàn tất, lưu lại thông tin SMTP details ở cùng trang đó:Email SMPT details.

    GHI CHÚ: Bạn phải lưu các thông tin account username, account password, SMTP host, và SMTP port để cấu hình email trong PHPMailer.

  3. Tạo một file có tên testphpmailer.php trong thư mục Public_html. Truy cập hPanel dashboard và nhấn vào File Manager -> Go to File Manager.
  4. Nhấn Add New. Đặt tên file testphpmailer.php rồi nhấn Create.
  5. Nhấn double click vào file vừa tạo testphpmailer.php, và copy-paste đoạn code bên dưới vào:
    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'YOUR PASSWORD HERE';
    $mail->setFrom('test@hostinger-tutorials.com', 'Your Name');
    $mail->addReplyTo('test@hostinger-tutorials.com', 'Your Name');
    $mail->addAddress('example@email.com', 'Receiver Name');
    $mail->Subject = 'Testing PHPMailer';
    $mail->msgHTML(file_get_contents('message.html'), __DIR__);
    $mail->Body = 'This is a plain text message body';
    //$mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'The email message was sent.';
    }
    ?>
  6. Chỉnh đoạn code ở trên cho đúng. Ví dụ, bạn cần thay thế EMAIL_ACCOUNT_PASSWORD bằng email passwordtest@hostinger-tutorials.com thành username của bạn, example@gmail.com thành recipient email address,… Khi hoàn tất, nhấn Save & Close.
  7. PHPMailer giờ đã sẵn sàng để dùng. Thực thi đoạn script trên bằng cách truy cập YourDomain.com/testphpmailer.php trên trình duyệt.

Hiểu về PHPMailer Components

Để hiểu PHPMailer hoạt động như thế nào, hãy cùng chúng tôi xem mô tả của ví dụ script trên đã dùng SMTP để gửi email thành công nhé. Đây là giải thích từng component:

use PHPMailer\PHPMailer\PHPMailer;

Dòng này nhập PHPMailer class vào global namespace.

require '../vendor/autoload.php';

Nó kết hợp nhiều thư viện khác nhau để PHPMailer chạy được.

$mail->

Tất cả những biến tương tự chứa thông tin quan trọng, như địa chỉ server, message header, attachment,… Tóm lại, hãy đảm bảo sender được bảo vệ bởi chứng thực SMTP.

if (!$mail->send()) {

Định nghĩa điều gì sẽ xảy ra khi script được thực thi.

echo 'Mailer Error: ' . $mail->ErrorInfo;

Nó sẽ hiện lỗi giải thích khi nào script thất bại.

} else {

Xác định điều gì xảy ra tiếp theo khi scritp được thực thị.

echo 'The email message was sent!';

Nếu email được gửi thành công, dòng này sẽ hiện ra.

PRO TIP: Dòng này SMTPDebug = 2; chỉ hữu dụng khi bạn gửi test script và muốn xem nó hoạt động như thế nào. Bạn cần chuyển nó về SMTPDebug = 0; nếu bạn đã test xong. Để tránh người dùng cuối nhận được SMTP deliver report.

Nếu bạn chú ý, bạn sẽ nhận ra nó hơi khác so với ví dụ đầu tiên – chúng tôi đang gửi một HTML message thay vì là một đoạn văn bản thuần túy.

Vì vậy, tin nhắn của bạn sẽ tải nội dung từ trong file message.html đặt trong cùng thư mục — public_html.

Định dạng này có nhiều chức năng tuyệt vời hơn so với plain text vì HTML có khả năng tùy chỉnh cao. Bạn có thể chỉnh màu, phong cách, ảnh, và thêm file multimedia vào, những thứ mà sẽ bị mất khi gửi mail plain text.

PHPMailer Contact Form

Bạn có thể ứng dụng PHPMailer vào nhiều thứ hơn thay vì chỉ gửi PHP mail đơn giản. Một khi bạn đã ứng dụng nó, bạn có thể tạo contact form nơi độc giả có thể nhanh chóng tương tác với bạn.

Đây là ví dụ của đoạn script:

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
    $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago');
    $mail->addAddress('example@gmail.com', 'Receiver Name');
    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';
        $mail->isHTML(false);
        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Share it with us!';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact form</title>
</head>
<body>
<h1>Do You Have Anything in Mind?</h1>
<?php if (!empty($msg)) {
    echo "<h2>$msg</h2>";
} ?>
<form method="POST">
    <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>
    <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>   
    <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
    <input type="submit" value="Send">
</form>
</body>
</html>

Giống với script trước, bạn cần tạo file mới trong thư mục public_html. Trong trường hợp này, chúng tôi đặt tên nó là formscript.php. Chỉnh thông tin bên trong script tuần tự. Sau đó, bạn có thể chạy script từ trong trình duyệt.

Đây là kết quả:PHPMailer ví dụ contact form. Khi khách hàng gửi tin nhắn, anh ta sẽ nhận được thông báo xác nhận và nội dung sẽ chuyển đến ibox của email bạn nhập ở đây:

$mail->addAddress('example@gmail.com', 'Receiver Name');

PRO TIP: Trong trường hợp PHPMailer contact form không hoạt động. thêm dòng $mail->SMTPDebug = 2; vào để xem điều gì gây ra lỗi. Đừng quên xóa số 2 thành 0 khi xong việc.

PHPMailer có nhiều ví dụ hơn nữa bạn có thể thử trong GitHub repository chín thức. Cũng vậy, nếu bạn đang dùng WordPress, bạn có thẻ dễ dàng tạo một contact form với rất nhiều plugin như WP Forms, Formidable Forms, hoặc Gravity Forms.WP Forms trang chủ.

Sửa lỗi thông thường của PHP mail và PHPMailer

Lỗi phát sinh trong khi dùng PHP mail hoặc PHPMailer. Đây là danh sách các lỗi thông thường và cách sửa lỗi chúng.

Sender Address Rejected: Not Owned by the User

Lỗi này có nghĩa server không thể chứng thực bằng thông tin bạn cung cấp.

Để sửa, hãy kiểm tra lại email bạn dùng để gửi email và chắc rằng nó đang tồn tại. Nếu nó trỏ tới sai inbox, hãy thay đổi. Ngoài ra, bạn cũng có thể kích hoạt SPF record

Gmail Couldn’t Verify That YourDomain.com Sent This Message

Nếu bạn thấy cảnh bảo này khi kiểm thử PHP mail script, có nghĩa là:

  • SPF record chưa được kích hoạt.
  • Bạn đã gửie amil từ một địa chỉ không tồn tại hoặc không thuộc về bạn. Hãy đảm bảo bạn nhập đúng thông tin đăng nhập trong phần SMTP authentication

Mail bị chuyển tới thư mục spam

Có nhiều lý do khiến gửi email PHP rơi vào thư mục spam. Đây là một số lý do phổ biến:

  • Tiêu đề gây hiểu lầm hoặc giống spam. Ví dụ như “test” hoặc “testing”, hello“, “urgent” hoặc gì đó tương tự. Đảm bảo là bạn đặt tiêu đề phù hợp xác định rõ ý định của bạn trong tiêu đề.
  • Bạn đang sử dụng địa chỉ email không đúng đã kích hoạt lớp bảo vệ của email người nhận. Việc này nhằm chống lại email spoofing và scam..
  • Bạn đang dùng những từ khóa bị xem là spam. Nó bao gồm những từ như “great offer” “click here” “special promotion” “this is not spam”,… Hãy thử đổi nội dung email để xem kết quả như thế nào.
  • Mailing list của bạn không có nút unsubscribe. Khi nhiều người báo cáo email của bạn là spam, bạn sẽ khó tránh khỏi spam filter. Có nút unsubscribe sẽ hạn chế số người báo mail của bạn là spam và tạo thêm niềm tin cho người đọc.

Kết luận

Bây giờ bạn đã biết làm thế nào để gửi email qua PHP. Mặc dù bài hướng dẫn này khá cơ bản, nhưng phương pháp cũng cùng như vậy nếu bạn muốn tạo contact form trên website của bạn.

Tuy nhiên nếu bạn muốn có thêm những script cao cấp chạy lệnh gửi email sử dụng PHP, hãy xem qua PHPMailer project. Nếu bạn có thủ thuật, mẹo nào để gửi email hoặc ý tưởng mới có thể chia sẽ. Đừng ngại hãy để lại bình luận bên dưới cho chúng tôi nhé.

Author
Tác giả

Hai G.

Hải G. là chuyên gia quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress và đã dùng nó hơn 5 năm nay. Sở thích của anh là đọc, viết blog, đi du lịch và tư vấn cho các bạn trẻ khởi nghiệp.