hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình PHP
  • Lập trình PHP cơ bản
Gửi Email trong PHP

Gửi Email trong PHP

  • 12-03-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Thiết lập Máy chủ Cục bộ cho Email
  • Cấu hình SMTP chuẩn bị gửi Email
  • Gửi Email Plain text
  • Gửi Email HTML
  • Gửi tệp đính kèm bằng email

Thiết lập Máy chủ Cục bộ cho Email

Giao thức truyền thư đơn giản (Simple Mail Transfer Protocol – SMTP) là một bộ hướng dẫn giao tiếp (giao thức) cho phép các ứng dụng phần mềm truyền email qua Internet. Máy chủ SMTP cho phép gửi tin nhắn đến người dùng máy tính khác dựa trên địa chỉ email. Mục tiêu chính của SMTP được sử dụng để thiết lập các quy tắc giao tiếp giữa các máy chủ.

Người dùng có thể tạo các tập lệnh PHP để gửi và nhận email bằng SMTP. Để xác minh và kiểm tra chức năng của các tập lệnh này, người dùng sẽ yêu cầu máy chủ SMTP. Một trong những cách dễ nhất và giá cả phải chăng để sử dụng máy chủ SMTP cục bộ là Papercut SMTP. Papercut SMTP phục vụ như một máy chủ SMTP cục bộ được thiết kế để nhận email cục bộ. Người dùng có thể kiểm tra email đã xác minh trực tiếp trong hộp thư đến Papercut. Người mới bắt đầu có thể sử dụng máy chủ SMTP nhẹ như một phương tiện để kiểm tra cách nhận thư. Ngoài ra, có thể sử dụng SMTP của google để cấu hình gửi mail

Cấu hình SMTP chuẩn bị gửi Email

Để gửi email, cần đảm bảo rằng tệp php.ini bao gồm các cấu hình tương ứng cho PHP. Tệp cũng phải có chi tiết chính xác về cách hệ thống quản lý email. Vì người dùng đang sử dụng XAMPP nên có thể mở tệp bằng cách nhấp chuột phải vào tùy chọn Cấu hình trong Bảng điều khiển XAMPP, sau đó chọn php.ini. Thao tác này sẽ tự động mở tệp trong Notepad. Ngoài ra, nếu người dùng muốn mở tệp thông qua File Explorer, hãy điều hướng đến thư mục cài đặt php (ví dụ: C:\xampp\php) tìm tệp php.ini, sau đó mở tệp đó bằng bất kỳ trình soạn thảo văn bản tương ứng.

Khi tệp được mở, hãy tìm [mail function] trong nội dung, Phần chức năng thư sẽ có các chỉ thị sau:

  • SMTP, mô tả địa chỉ máy chủ email của người dùng
  • sendmail_from, mô tả địa chỉ email của người dùng

Ngoài ra, sửa nội dung file sendmail.ini với nội dung như sau:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP=smtp.gmail.com
; http://php.net/smtp-port
smtp_port=587

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

[email protected]
auth_password=your_gmail_password

; Force the From header (recommended).
; http://php.net/mail.force- extra-parameters
mail.force_extra_parameters = '[email protected]'

Trong trường hợp gặp lỗi SMTP server response: 530 5.7.0 Must issue a STARTTLS command first, xử lý như sau:

Tìm file php.ini và tìm dòng sendmail_path, sửa nội dung thành:

sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

Ngoài ra, chúng ta có thể cấu hình STMP khi viết code bên trong dự án bằng mã PHP, nội dung này các bạn có thể tham khảo bài viết: sử dụng SMTP của google để cấu hình gửi mail

Gửi Email Plain text

Để gửi email, PHP sử dụng hàm mail(). 3 tham số bắt buộc phải truyền vào hàm mail():

  • Địa chỉ email người nhận
  • Tiêu đề của tin nhắn
  • Mô tả tin nhắn

Cú pháp:

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

Mô tả tham số:

Tham sốĐại diệnMô tảBắt buộc/tùy chọn
toEmail người nhậnĐối số này bao gồm địa chỉ chi tiết của người nhận email. Đảm bảo sử dụng danh sách được phân tách bằng dấu phẩy “,” nếu có nhiều hơn một người nhậnbắt buộc
subjectTiêu đề tin nhắnTham số này bao gồm chủ đề của email, đảm bảo tham số này không có bất kì ký tự new line “\n” nàobắt buộc
messageMô tả tin nhắnTham số này bao gồm mô tả của tin nhắn sẽ được gửi cho người nhận. Đảm bảo mỗi dòng phân tách bởi new line “\n” nếu có, tối đa 70 ký tựbắt buộc
headersheadersheader Đây là một đối số tùy chọn bao gồm các header bổ sung. Đảm bảo tách riêng từng header bằngCarriage Return Line Feed (CRLF) (\r\n)Tùy chọn
parameterstham sốĐây cũng là một đối số tùy chọn bao gồm các tham số, nếu có, sẽ được chuyển đến chương trình gửi mail.Tùy chọn

Khi hàm mail() được gọi, PHP sẽ cố gắng gửi email. Nếu nó được gửi thành công, PHP trả về true, ngược lại, nó trả về false.

Gửi Email HTML

Trong PHP, khi người dùng gửi một tin nhắn văn bản, theo mặc định, nó được hiểu là văn bản đơn giản. Ngay cả khi tin nhắn chứa các thẻ HTML, nó vẫn được coi là văn bản. Điều quan trọng cần lưu ý là các thẻ HTML không được định dạng theo cú pháp HTML. Tuy nhiên, nếu người dùng muốn gửi email ở định dạng HTML, thì cũng có một tùy chọn cho nó. Để gửi một email như vậy, người dùng phải đảm bảo nhập MIME version, content type và character set.

ví dụ:

<?php
// phpinfo();
$html_success = '';
if(isset($_POST['sendmail'])){
    $to = $_POST['email'];
    $subject = $_POST['subject'];
    $content = $_POST['content'];
    // It is mandatory to set the content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

    // More headers. From is required, rest other headers are optional
    $headers .= 'From: <[email protected]>' . "\r\n";
    //$headers .= 'Cc: [email protected]' . "\r\n";

    $result = mail($to, $subject, $content,$headers);
    if($result){
        $html_success = '<div class="alert alert-success">
                            <strong>Success!</strong> Email has been sent.
                        </div>';
    }else{
        var_dump($result);
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form method="post">
        <p>Email nhận</p>
        <input type="text" name="email" placeholder="email">
        <p>Tiêu đề mail</p>
        <input name="subject" type="text" />
        <p>nôi dung mail</p>
        <textarea name="content"></textarea>
        <input type="submit" name="sendmail" value="submit">
        <?php echo $html_success; ?>
    </form>
</body>
</html>

Gửi tệp đính kèm bằng email

Khi người dùng muốn gửi email có tệp đính kèm, điều cần thiết là đặt header content type thành multipart/mixed. Sau đó, người dùng có thể chỉ định phần văn bản và phần đính kèm trong boundary – dịch nôm na là ranh giới.

Ví dụ:

<?php
$to = '[email protected]';
$subject = 'Email with attachment';
$message = 'Please find the attached file.';

// attachment file path and name
$file_name = 'attachment-file.pdf';
$file_path = '/path/to/attachment/'.$file_name;

// Read the file content into a string variable
$file_content = file_get_contents($file_path);

// Encode the content using base64 encoding
$file_encoded = base64_encode($file_content);

// Generate a random boundary string to separate the message body and attachment section
$boundary = md5(time());

// Set email headers
$headers = "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"{$boundary}\"";

// Message body
$body = "This is a multi-part message in MIME format.\r\n\r\n";
$body .= "--{$boundary}\r\n";
$body .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\r\n";
$body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$body .= "{$message}\r\n\r\n";

// Attachment section
$body .= "--{$boundary}\r\n";
$body .= "Content-Type: application/octet-stream;\r\n";
$body .= " name=\"{$file_name}\"\r\n";
$body .= "Content-Disposition: attachment;\r\n";
$body .= " filename=\"{$file_name}\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n\r\n";
$body .= "{$file_encoded}\r\n\r\n";

// Send the email
$mail_sent = mail($to, $subject, $body, $headers);

// Check if email sent successfully or not
if ($mail_sent) {
    echo "Email with attachment has been sent.";
} else {
    echo "There was an error sending the email with attachment.";
}
?>

Bài viết liên quan:

Hướng dẫn sử dụng xdebug để gỡ lỗi PHP bằng visual studio code môi trường windows
Hướng dẫn cấu hình Extension live server tự động tải lại PHP khi cập nhật file trên visual studio code
Kỹ thuật AJAX trong PHP
Làm việc với JSON trong PHP
Chuyển hướng trình duyệt, download file bằng HTTP Header trong PHP
Một số cải tiến mới của PHP 8
Nhận dạng trình duyệt và nền tảng trong PHP
Từ khóa final, static, overloading và magic method trong PHP
Abstract Class (lớp trừu tượng) trong PHP
Interface trong hướng đối tượng PHP
Method (phương thức), public,private,protected, method overriding trong hướng đối tượng PHP
Iterable và iterator trong PHP

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Một số cải tiến trong ASP.NET Core, Razor Page, Model Binding, Gabbage collection

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×