Thư trong PHP không hoạt động

Bạn đã mua một miền và tạo tài khoản email đầu tiên của mình. Đã đến lúc gửi một số email, nhưng bạn không hoàn toàn chắc chắn về cách thực hiện việc đó

Nếu trang web hoặc ứng dụng web của bạn được xây dựng trên PHP, bạn có thể gửi email qua tính năng thư PHP. Điều này có thể hữu ích để tạo các biểu mẫu thư được tạo tùy chỉnh và gửi các email dựa trên văn bản đơn giản

Thông thường, có hai tùy chọn để gửi email bằng PHP – hàm PHP mail() sẵn có hoặc thư viện gửi thư như PHPMailer

Trong hướng dẫn này, chúng tôi sẽ đề cập đến sự khác biệt giữa hàm PHP mail() và PHPMailer và chỉ cho bạn cách gửi email bằng chúng

Thư trong PHP không hoạt động

 

Tại sao và khi nào sử dụng Thư PHP?

Chúng tôi khuyên bạn nên sử dụng gói gửi thư PHP bên ngoài nếu bạn muốn gửi nhiều email an toàn hơn. Hàm PHP mail() gốc không phù hợp với số lượng lớn email, vì nó mở và đóng kết nối ổ cắm Giao thức truyền thư đơn giản (SMTP) với mỗi email

Tạo dựng uy tín thương hiệu với dịch vụ lưu trữ email chuyên nghiệp. Nhận dịch vụ lưu trữ email

Có nhiều gói thư PHP để lựa chọn, bao gồm Pear Mail và Swift Mailer. Trong bài viết này, chúng tôi sẽ sử dụng PHPMailer

Trước khi bắt đầu, đây là tóm tắt nhanh về ưu và nhược điểm của hàm PHP mail() và PHPMailer

mail() ưu điểm

  • Đã được cài đặt sẵn và sẵn sàng sử dụng, tất cả những gì bạn cần là có PHP
  • Tương thích ngược để thay đổi phiên bản PHP sẽ không phá vỡ tập lệnh
  • Dễ dàng để tìm hiểu và sử dụng

mail() nhược điểm

  • Khó thiết lập với SMTP, điều này sẽ kích hoạt bộ lọc SPAM của người nhận
  • Không phù hợp để gửi một số lượng lớn email
  • Gửi email là một quá trình phức tạp. Do đó, chỉ sử dụng hàm mail() là không đủ. Do đó, các thư viện bên ngoài như PHPMailer được khuyến nghị thay thế

Ưu điểm của PHPMailer

  • Giới thiệu các cấu trúc email phức tạp, chẳng hạn như tài liệu HTML và tệp đính kèm
  • Hỗ trợ SMTP và xác thực được tích hợp qua SSL và TLS
  • Có thể được sử dụng để gửi số lượng lớn email trong thời gian ngắn

Nhược điểm của PHPMailer

  • Yêu cầu cài đặt
  • Phải mất một thời gian để làm quen và tìm hiểu logic

Cách sử dụng PHPMailer để gửi email

PHPMailer là thư viện gửi mail phổ biến hỗ trợ gửi qua hàm mail() hoặc qua SMTP server. Nó cấp quyền truy cập vào một tập hợp các chức năng để gửi email, đơn giản hóa quá trình định cấu hình thư PHP

Cài đặt PHPMailer

Việc cài đặt PHPMailer khá đơn giản, đặc biệt nếu bạn đã cài đặt Composer. Các gói lưu trữ đám mây và chia sẻ của chúng tôi bao gồm hai phiên bản của phần mềm này

Nếu bạn cần phiên bản Composer cũ hơn, hãy sử dụng lệnh composer. Mặt khác, nếu bạn cần một phiên bản mới hơn hoặc phiên bản PHP của bạn là 8+, hãy sử dụng lệnh composer2

Để cài đặt PHPMailer theo cách thủ công, hãy làm theo các bước sau

  1. Kết nối với tài khoản của bạn thông qua ứng dụng khách SSH
  2. Từ bảng điều khiển hPanel của bạn, đi tới Nâng cao → Truy cập SSH và lưu ý IP, cổng, tên người dùng và mật khẩu SSH trong chi tiết SSH
  3. Mở PuTTY và nhập thông tin SSH của bạn vào các trường Tên máy chủ (hoặc địa chỉ IP) và Cổng. Sau đó, nhấp vào Mở
  1. Khi một cửa sổ lệnh xuất hiện, hãy nhập tên người dùng và mật khẩu SSH của bạn và nhấn Enter. Hãy nhớ rằng PuTTY sẽ không hiển thị mật khẩu, vì vậy đừng ngạc nhiên nếu nó không xuất hiện trên màn hình
  2. Thực hiện lệnh sau để điều hướng đến thư mục public_html
cd public_html
  1. Sau đó, chạy lệnh sau
composer2 require phpmailer/phpmailer
  1. Đợi một lát cho đến khi quá trình cài đặt kết thúc. Đây là những gì nó sẽ trông giống như

Thư trong PHP không hoạt động

Hiểu các thành phần PHPMailer

Để hiểu cách thức hoạt động của PHPMailer, hãy xem lại từng thành phần tập lệnh ở trên

use PHPMailer\PHPMailer\PHPMailer;

Dòng trên nhập lớp PHPMailer vào không gian tên chung

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

Dòng này bao gồm các thư viện khác nhau mà PHPMailer cần

$mail = new PHPMailer;

Điều này tạo ra một đối tượng PHPMailer mới

 $mail->isSMTP();

Mã ở đây yêu cầu lớp PHPMailer sử dụng cấu hình SMTP tùy chỉnh được xác định trong tập lệnh thay vì máy chủ thư cục bộ

$mail->SMTPDebug = 2;

Lệnh SMTPDebug cho phép bạn phát hiện nếu có sự cố xảy ra với kết nối SMTP

$mail->Host = 'smtp.hostinger.com';

Đây là nơi chỉ định địa chỉ máy chủ SMTP

________số 8_______

Đặt cổng SMTP tại đây

$mail->SMTPAuth = true;

Dòng này được sử dụng để bật xác thực SMTP

composer2 require phpmailer/phpmailer
0

Chỉ định địa chỉ email của bạn ở đây

composer2 require phpmailer/phpmailer
1

Tại đây, nhập mật khẩu email của bạn

composer2 require phpmailer/phpmailer
2

Đây là nơi bạn chèn địa chỉ email của người gửi

composer2 require phpmailer/phpmailer
3

Dòng này sẽ cho người nhận biết họ nên trả lời địa chỉ nào

composer2 require phpmailer/phpmailer
4

Chèn địa chỉ của người nhận vào đây

composer2 require phpmailer/phpmailer
5

Thêm dòng chủ đề của email tại đây

composer2 require phpmailer/phpmailer
6

Dòng này đọc nội dung thư HTML từ tệp bên ngoài. Hàm file_get_contents() sẽ tải nội dung từ tin nhắn. html, một tệp cục bộ nằm trong thư mục public_html và đưa nó vào thư

composer2 require phpmailer/phpmailer
7

Dòng này chứa nội dung thư

Mẹo chuyên nghiệp

Tránh "kiểm tra" và "kiểm tra" trong nội dung hoặc chủ đề email. Những điều khoản như vậy có thể khiến máy chủ thư của người nhận nghi ngờ bạn đang gửi thư rác và chặn email

composer2 require phpmailer/phpmailer
8

Nếu bạn muốn bao gồm tệp đính kèm, hãy bao gồm tên tệp và xóa dấu gạch chéo kép khỏi câu lệnh này

composer2 require phpmailer/phpmailer
9

Dòng này xác định điều gì sẽ xảy ra khi tập lệnh được thực thi

use PHPMailer\PHPMailer\PHPMailer;
0

Thao tác này sẽ hiển thị thông báo lỗi cùng với lời giải thích nếu tập lệnh không gửi được

use PHPMailer\PHPMailer\PHPMailer;
1

}else{ mở rộng câu lệnh if và mô tả điều gì sẽ xảy ra nếu điều kiện trước đó không được đáp ứng

use PHPMailer\PHPMailer\PHPMailer;
2

Giả sử email đã được gửi thành công, thông báo này sẽ xuất hiện

Mẹo chuyên nghiệp

SMTPDebug = 2; . Nhớ đổi thành SMTPDebug = 0;

Sử dụng PHPMailer với Hostinger SMTP

Sau khi cài đặt PHPMailer, cuối cùng bạn cũng có thể bắt đầu gửi email PHP

Trong phần này, chúng tôi sẽ hướng dẫn bạn cách gửi email thông qua máy chủ SMTP của Hostinger bằng PHPMailer

Mẹo chuyên nghiệp

Nếu bạn đang sử dụng Titan Mail, hãy sử dụng máy chủ SMTP của nó để thay thế

  1. Tạo tài khoản email bằng cách truy cập hPanel, sau đó vào Emails → Email Accounts → Create email account
  2. Điền địa chỉ email mới và đặt mật khẩu. Sau đó, nhấp vào Tạo. Hãy nhớ thông tin này vì bạn sẽ sử dụng nó để gửi thư qua PHPMailer
  3. Từ cùng một trang, đi tới Cài đặt cấu hình → Cấu hình thủ công và lưu ý Cổng SMTP và Tên máy chủ
  1. Truy cập bảng điều khiển hPanel và điều hướng đến Tệp → Trình quản lý tệp. Click vào thư mục public_html chọn Add New để tạo file mới. Đặt tên cho tệp phpmailer. php và nhấp vào Tạo
  2. Nhấp đúp vào phpmailer. php và sao chép và dán mã bên dưới. Sửa đổi nó cho phù hợp. Đảm bảo thay thế [email protected] tld và người nhậ[email protected]ền. tld với các miền hiện có và My$tr0ngPa55w0rd. với mật khẩu tài khoản email của bạn
use PHPMailer\PHPMailer\PHPMailer;
3
  1. Sau khi chỉnh sửa mã, nhấp vào Lưu & Đóng. Để thực thi tập lệnh, hãy nhập tên miền của bạn. tld/phpmailer. php trong trình duyệt web của bạn

Tạo biểu mẫu liên hệ PHPMailer

Ngoài việc sử dụng PHPMailer để gửi thư PHP đơn giản, người dùng cũng có thể sử dụng nó để tạo biểu mẫu liên hệ, cho phép khán giả liên hệ với họ

Tương tự như các tập lệnh PHP trước đây, việc tạo một tệp PHP mới trong thư mục public_html là điều cần thiết trước khi tiếp tục. Đặt tên cho nó. php

Sao chép và dán tập lệnh bên dưới vào tệp mới tạo và sửa đổi thông tin bên trong cho phù hợp

use PHPMailer\PHPMailer\PHPMailer;
4

Mẹo chuyên nghiệp

Lấy đầu vào của người dùng từ $_POST và sử dụng nó không được làm sạch sẽ không an toàn do các cuộc tấn công kịch bản chéo trang (XSS). Để tránh điều này, hãy xem các phương pháp hay nhất để khử trùng biến PHP

Lưu các thay đổi của bạn, sau đó chạy tập lệnh từ trình duyệt của bạn

Đây là kết quả sẽ như thế nào

Thư trong PHP không hoạt động

Nếu khách truy cập gửi tin nhắn qua biểu mẫu, họ sẽ nhận được thông báo xác nhận và nội dung của biểu mẫu sẽ đến hộp thư đến của địa chỉ email bạn đã nhập tại đây

composer2 require phpmailer/phpmailer
4

Mẹo chuyên nghiệp

Nếu biểu mẫu liên hệ PHPMailer không hoạt động, hãy thay đổi $mail->SMTPDebug = 0; . Đừng quên xóa dòng hoặc thay đổi 2 thành 0 sau đó

Để xem các ví dụ khác về cách sử dụng thư viện gửi email này, hãy truy cập kho lưu trữ chính thức của PHPMailer trên GitHub

Nếu bạn là người dùng WordPress, thay vào đó, bạn có thể sử dụng các plugin biểu mẫu liên hệ như Formidable Forms, Gravity Forms hoặc WPForms để tạo biểu mẫu liên hệ

Cách gửi email bằng hàm PHP Mail()

Một phương pháp khác để gửi email trực tiếp từ tập lệnh PHP là hàm mail() tích hợp sẵn. Để sử dụng tính năng gửi thư PHP, người dùng lưu trữ ứng dụng hoặc trang web PHP của họ trên máy chủ cục bộ sẽ cần định cấu hình chương trình Sendmail bằng cách thay đổi tệp php. ini trong thư mục cài đặt PHP của họ

Nếu bạn sử dụng máy chủ lưu trữ, Sendmail thường được cấu hình sẵn. Tuy nhiên, bạn phải đảm bảo rằng nhà cung cấp dịch vụ lưu trữ của bạn cho phép bạn quản lý tùy chọn dịch vụ Sendmail theo cách thủ công

Người dùng Hostinger có thể chuyển đổi chức năng này bằng cách truy cập hPanel và điều hướng đến Email → Mail Service Control

Thư trong PHP không hoạt động

Theo mặc định, dịch vụ Sendmail đã được bật sẵn. Tuy nhiên, hãy kiểm tra lại để chắc chắn

Quan trọng. Chức năng PHP Mail sẽ được bật mặc định nếu bạn sử dụng Titan Mail. Do đó, không thể bật hoặc tắt nó trong hPanel

Hiểu các thành phần thư PHP

Để giúp bạn hiểu hàm PHP mail(), chúng tôi sẽ xem xét các thành phần của tập lệnh PHP mà chúng tôi đã sử dụng trong phần trước

use PHPMailer\PHPMailer\PHPMailer;
6

Hai dòng đầu tiên ở trên cho phép báo lỗi để thông báo cho bạn nếu tập lệnh PHP không thực thi được

use PHPMailer\PHPMailer\PHPMailer;
7

Dòng này phải chứa địa chỉ email của người gửi. Hầu hết các nhà cung cấp dịch vụ lưu trữ cấm thêm địa chỉ email ngẫu nhiên vào đây, vì nó có thể được sử dụng để giả mạo. Vì vậy, tốt hơn hết bạn nên sử dụng tên miền của mình để thực thi thành công tập lệnh

use PHPMailer\PHPMailer\PHPMailer;
8

Địa chỉ email của người nhận ở đây. Để gửi thư cho nhiều người nhận, hãy phân tách các địa chỉ email bằng dấu phẩy

use PHPMailer\PHPMailer\PHPMailer;
9

Nhập dòng chủ đề cho email tại đây

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

Tại đây, hãy nhập nội dung email của bạn

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

Dòng này thường được sử dụng để thêm các tiêu đề bổ sung, chẳng hạn như Từ, Trả lời đến và Cc – các tiêu đề bổ sung này phải được phân tách bằng CRLF

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

Dòng này được sử dụng để thực thi chức năng và kiểm tra xem nó đã chạy thành công chưa

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

Thông báo trên sẽ xuất hiện khi tập lệnh được thực thi thành công

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

Ngoài ra, thông báo này sẽ được hiển thị nếu nó không thành công

Hãy nhớ rằng mặc dù các tiêu đề bổ sung là tùy chọn, nhưng điều cần thiết là phải đề cập đến tiêu đề Từ khi gửi thư. Nếu không, bạn sẽ nhận được thông báo như thế này

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

Để biết thêm thông tin về chức năng Sendmail và các tham số của nó, hãy tham khảo tài liệu PHP chính thức

Tạo tệp thử nghiệm cho thư PHP

Sau khi đảm bảo rằng Sendmail đang hoạt động, chúng ta phải tạo một tệp tập lệnh thư PHP và đặt nó vào thư mục public_html

Đây là cách thực hiện

  1. Từ hPanel, điều hướng đến Tệp → Trình quản lý tệp để truy cập Trình quản lý tệp của Hostinger
  2. Bấm đúp vào thư mục public_html và chọn biểu tượng Tệp mới ở trên cùng. Đặt tên cho tệp mới này là testmail. php, sau đó nhấn Tạo
  3. Nhấp đúp vào testmail. php để chỉnh sửa nó. Bạn có thể sử dụng mã PHP cơ bản bên dưới nhưng thay đổi các tham số cho phù hợp. Chúng tôi sẽ mô tả các thành phần tập lệnh chi tiết hơn trong tiểu mục sau
require '../vendor/autoload.php';
6
  1. Nhấp vào Lưu & Đóng sau khi hoàn tất
  2. Gửi email bằng cách truy cập yourdomain/testmail. php từ trình duyệt web của bạn. Nhớ đổi “yourdomain” thành tên miền dùng khi tạo testmail. php

Thư trong PHP không hoạt động

Gửi thư HTML bằng PHP

Hàm PHP mail() cũng có thể được sử dụng để gửi email có định dạng HTML. Định dạng này có khả năng tùy biến cao so với tin nhắn văn bản thuần túy

Quy trình gửi thư HTML cũng giống như vậy, nhưng lần này bạn cần gửi thư HTML và các tiêu đề tham số bổ sung

Dưới đây là một ví dụ về tập lệnh cơ bản để gửi email có định dạng HTML

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

Cách khắc phục các lỗi PHP Mail và PHPMailer phổ biến

Trong phần sau, chúng ta sẽ xem xét một số vấn đề phổ biến nhất có thể xảy ra khi sử dụng hàm PHP mail() hoặc PHPMailer và cách khắc phục chúng

Địa chỉ người gửi bị từ chối. Không thuộc sở hữu của người dùng

Lỗi này có nghĩa là máy chủ không thể xác thực người gửi bằng các chi tiết được cung cấp. Để khắc phục, hãy kiểm tra địa chỉ email bạn đã sử dụng để gửi thư và đảm bảo địa chỉ đó tương ứng với địa chỉ hiện có

Ngoài ra, hãy đảm bảo Khung chính sách người gửi (SPF) của bạn được bật. Nếu bạn sử dụng Hostinger, hãy kiểm tra bản ghi SPF của bạn bằng cách truy cập hPanel và điều hướng đến Email → Tài khoản email → Cài đặt DNS → Quản lý gửi email

Nếu bản ghi SPF được bật, nó sẽ được hiển thị là Đang hoạt động

Gmail không thể xác minh tên miền đó. TLD đã gửi tin nhắn này

Nếu bạn thấy cảnh báo này khi kiểm tra tập lệnh thư PHP, nguyên nhân có thể là do một trong các nguyên nhân sau

  • Không có bản ghi SPF trong Vùng DNS của miền. Nếu bản ghi bị thiếu hoặc bạn đang sử dụng máy chủ định danh bên ngoài, hãy thêm bản ghi SPF TXT mới theo cách thủ công qua hPanel hoặc cPanel
  • Bạn đã sử dụng chi tiết xác thực SMTP không hợp lệ. Đảm bảo sử dụng địa chỉ email tồn tại và thuộc về bạn

Thư Chuyển đến Thư mục Thư rác

Có nhiều lý do khiến thư PHP có thể kích hoạt bộ lọc thư rác. Một số ví dụ phổ biến nhất bao gồm

  • Chủ đề gây hiểu lầm hoặc giống như thư rác. Ví dụ bao gồm việc sử dụng các thuật ngữ như “thử nghiệm” hoặc “khẩn cấp. ” Đảm bảo đặt mục đích rõ ràng trong dòng Chủ đề
  • Địa chỉ người gửi không chính xác. Điều này có thể gọi các biện pháp bảo mật để lọc email của bạn nhằm ngăn chặn email giả mạo và lừa đảo
  • Sử dụng các từ kích hoạt thư rác. Điều này bao gồm các cụm từ như “ưu ​​đãi tuyệt vời” và “đây không phải là thư rác. ” Hãy thử thay đổi nội dung tin nhắn của bạn để xem đây có phải là sự cố không
  • Danh sách gửi thư của bạn không có liên kết hủy đăng ký. Đảm bảo bao gồm nút hủy đăng ký để ngăn chặn sự cố này và tạo niềm tin cho người đọc

Phần kết luận

Gửi email là một chiến lược tiếp thị cơ bản cho bất kỳ doanh nghiệp hoặc trang web nào. Hàm PHP mail() phù hợp để gửi một lượng nhỏ tin nhắn dựa trên văn bản đơn giản. Trong khi đó, PHPMailer là phương pháp tốt hơn và an toàn hơn để gửi email hàng loạt hoặc tạo biểu mẫu liên hệ

Để gửi email bằng tính năng thư PHP, hãy tạo một tệp PHP mới trong thư mục public_html và nhập hàm mail(). Sau đó, thực thi tập lệnh bằng trình duyệt web của bạn

Đối với việc gửi email bằng PHPMailer, bạn sẽ cần cài đặt một công cụ chuyên dụng, tạo một tài khoản email cho nó và bao gồm các giá trị từ cài đặt SMTP của bạn trong tập lệnh của PHPMailer. Tạo một tệp PHP mới trong thư mục public_html cũng rất cần thiết

Trong hướng dẫn này, chúng tôi đã giới thiệu quá trình cài đặt PHPMailer và tạo tập lệnh thử nghiệm cùng với biểu mẫu chức năng. Chúng tôi cũng đã đề cập đến quá trình gửi email bằng hàm PHP mail()

Chúng tôi hy vọng bạn thấy hướng dẫn này hữu ích. Nếu bạn có thêm bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận

Tác giả

Domantas G

Domantas dẫn dắt các nhóm nội dung và SEO về phía trước với những ý tưởng mới và phương pháp tiếp cận vượt trội. Được trang bị kiến ​​thức sâu rộng về SEO và tiếp thị, anh đặt mục tiêu quảng bá Hostinger đến mọi nơi trên thế giới. Trong thời gian rảnh rỗi, Domantas thích trau dồi kỹ năng phát triển web của mình và đi du lịch đến những nơi xa lạ

Thêm từ Domantas G

Thư trong PHP không hoạt động

Đồng tác giả

Ignas R

Ignas rất hài lòng khi giúp mọi người giải quyết ngay cả những vấn đề kỹ thuật phức tạp nhất. Mục tiêu hiện tại của anh ấy là viết những bài dễ theo dõi để những vấn đề này sẽ không xảy ra nữa. Trong thời gian rảnh rỗi, Ignas thích chơi trò chơi điện tử và sửa chữa mọi thứ xung quanh nhà của mình

Tại sao email PHP của tôi không hoạt động?

Ví dụ: có thể do bạn thiếu các thông số cần thiết, có lỗi chính tả trong địa chỉ email của người nhận hoặc cần thiết lập chuyển tiếp SMTP. Out of all the possible options as to why your PHP mail() isn't sending email, we found that most issues stem from Postfix being configured incorrectly.

Tại sao PHPMailer không hoạt động?

Có nhiều trường hợp phổ biến về lỗi kết nối SMTP trong PHPMailer và thiếu SSL cũng là một trong số đó. Có thể xảy ra trường hợp tiện ích mở rộng Open SSL không được bật trong php của bạn. ini đang tạo ra sự cố kết nối . Vì vậy, khi bạn kích hoạt extension=php_openssl.

Làm cách nào để kích hoạt chức năng thư trong PHP?

Thay đổi php. .
Mở php của bạn. ini bằng cách sử dụng bên dưới. .
Tìm kiếm [chức năng thư] trong tệp. .
Thêm chi tiết máy chủ thư của bạn vào tệp hoặc trong trường hợp bạn có, bạn có thể thay đổi nó (máy chủ thư có thể là của riêng bạn, tức là. .
Lưu/đóng php. tập tin ini

Làm thế nào để sử dụng mail() trong PHP?

PHP sử dụng hàm mail() để gửi email. Chức năng này yêu cầu ba đối số bắt buộc chỉ định địa chỉ email của người nhận, chủ đề của thư và thư thực tế, ngoài ra còn có hai tham số tùy chọn khác. thư (đến, chủ đề, thư, tiêu đề, tham số );