Hiện nay, các nhà cung cấp thường sử dụng mã nguồn mở PHPMailer để gửi các email dễ dàng và nhanh chóng. Tuy nhiên, trong quá trình chạy nó sẽ xảy ra một số sự cố cần được khắc phục kịp thời. Cụ thể đó là lỗi SMTP error: could not connect to SMTP host. Trong bài viết dưới đây, chúng ta sẽ tìm hiểu chi tiết về các lỗi cũng như cách khắc phục.
Lỗi SMTP error: could not connect to SMTP host là gì?
Lỗi SMTP error: could not connect to SMTP host là tình trạng không thể kết nối với máy chủ thường xảy ra trên hệ thống. Có rất nhiều nguyên nhân gây ra loại lỗi này và nó sẽ phụ thuộc vào từng tình huống cụ thể. Hãy cùng theo dõi một số trường hợp lỗi được liệt kê dưới đây và cách khắc phục tốt nhất.
Nguyên nhân lỗi SMTP error: could not connect to SMTP host
Lỗi với phiên bản mới nhất của PHP
Đây là sự cố không thể kết nối với máy chủ xảy ra với phiên bản mới của PHP. Cụ thể là với các phiên bản PHP 5.6 trở đi thường xuyên gặp phải vấn đề lỗi SMTP error: could not connect to SMTP host. Nguyên nhân là do ở cách triển khai SSL của các phiên bản PHP mới. Hãy áp dụng phương pháp sau đây để khắc phục sự cố này:
{{EJS0}}
Hoặc một phương pháp khắc phục khác đó là sử dụng tệp php.ini. Tuy nhiên, cách này thường không được khuyến khích sử dụng bởi PHP đã thực hiện các SSL khá nghiêm ngặt. Ngoài ra, giải pháp này chỉ có hiệu quả với các phiên bản từ PHPMailer v5.2.10 trở lên.
Lỗi kết nối SMTP trên nhà cung cấp dịch vụ Hosting
Đây là vấn đề lỗi kết nối SMTP xảy ra từ phía nhà cung cấp dịch vụ lưu trữ được chia sẻ. Chẳng hạn như khi người dùng chạy code của họ trên nhà cung cấp dịch vụ lưu trữ chia sẻ và cố gắng kết nối với các nhà cung cấp SMTP khác. Lúc này, hệ thống sẽ gặp phải lỗi “SMTP connect() failed”.
Nguyên nhân của lỗi này được tìm thấy chủ yếu là do các quy tắc của Firewall trên cơ sở hạ tầng của nhà cung cấp dịch vụ đã bị chặn kết nối SMTP gửi đi các cổng 15, 587 và 465. Đồng thời còn có hầu hết các máy chủ bên ngoài cũng bị ngắt kết nối. Quá trình này mặc dù giúp bảo vệ cơ sở hạ tầng khỏi các thư rác, nhưng lại gây khó khăn cho các nhà phát triển.
Để khắc phục sự cố này, người dùng có thể liên hệ với nhà cung cấp dịch vụ lưu trữ để họ kết nối lại các cổng SMTP. Hoặc để kiểm tra xem cổng 25, 587 và 465 có thực sự bị chặn kết nối hay không. Hãy theo dõi các hướng dẫn sau đây:
Chạy thử Telnet
Bằng cách sử dụng lệnh Telnet để kiểm tra xem các cổng ra có được kết nối hay không:
{{EJS1}}
Trường hợp cổng 25 không bị chặn kết nối thì hệ thống sẽ nhận được phản hồi 220 thành công.
{{EJS2}}
Trường hợp cổng 25 bị chặn thì hệ thống sẽ hiển thị lỗi kết nối hoặc không có bất kỳ phản hồi nào.
{{EJS3}}
Sử dụng outPorts
outPorts là một công cụ miễn phí trên GitHub được sử dụng để quét tất cả các cổng ra để tìm ra lỗi chính xác nhất. Sau khi cài đặt outPorts, hãy chạy lệnh “outPorts 25” trong Terminal để kiểm tra kết nối cổng 25.
Lỗi do sự cố hỗ trợ SSL với PHP
Đây là sự cố kết nối SMTP của PHPMailer không thành công do sự cố hỗ trợ SSL với PHP. Đây là một trong những lỗi thường gặp nhất do thiếu SSL. Hoặc cũng có trường hợp không thể kết nối do tiện ích mở rộng Open SSL không được kích hoạt trong php.ini hệ thống.
Để kiểm tra lỗi, hãy kích hoạt Extension=php_openssl.dll trong tệp ini, sau đó là bật đầu ra gỡ lỗi để xem SSL có gặp lỗi gì hay không.
PHPMailer cung cấp chức năng giúp bạn có thể nhận nhật ký chi tiết về kết nối SMTP. Hãy thêm đoạn code sau vào tập lệnh sau để bật chức năng này:
{{EJS4}}
Khi đặt giá trị của thuộc tính SMTPDebug = 2 thì hệ thống sẽ trả về một Level Transcript của máy khách và máy chủ. Trong trường hợp người dùng sử dụng dịch vụ lưu trữ Godaddy thì khi kích hoạt SSL trên hệ thống cũng không có hiệu quả trong việc khắc phục sự mất kết nối SMTP.
Lỗi do sự cố chặn IPv6
Đây là vấn đề lỗi PHPMailer không thể kết nối với SMTP do sự cố chặn IPv6. Nguyên nhân là do một số công ty lưu trữ mới thành lập như DigitalOcean cung cấp kết nối IPv6 ngăn chặn các kết nối SMTP gửi đi qua IPv6. Tuy nhiên, nó lại khả thi đối với cổng IPv4.
Để giải quyết vấn đề này, người dùng có thể đặt thuộc tính máy chủ lưu trữ thành địa chỉ IPv4 bằng cách sử dụng hàm gethostbyname như sau:
{{EJS5}}
Tuy nhiên, phương pháp khắc phục này có thể gây ra các sự cố kiểm tra tên chứng chỉ trên hệ thống. Người dùng có thể tự giải quyết vấn đề này bằng cách tắt kiểm tra trong phần SMTPOptions.
Trong trường hợp các nhà cung cấp DigitalOcean chặn cổng kết nối SMTP, người dùng cần xác nhận lại xem chúng có thực sự được kích hoạt hay chưa để có thể tìm ra được giải pháp khắc phục hiệu quả nhất.
Tổng kết
Lỗi Smtp error: could not connect to smtp host là một trong những vấn đề liên quan đến kết nối thường xuyên xảy ra trên các máy chủ SMTP. Trong trường hợp hệ thống liên tục nhận được thông báo lỗi thì người dùng chỉ cần xác định loại sự cố và áp dụng các bước khắc phục phù hợp nhất.
Nếu còn gặp bất cứ vướng mắc gì, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.