Hướng dẫn php send email not working - php gửi email không hoạt động
Mặc dù có những phần của câu trả lời này chỉ áp dụng cho việc sử dụng chính chức năng ____, nhưng nhiều bước khắc phục sự cố này có thể được áp dụng cho bất kỳ hệ thống gửi thư PHP nào. Show
Có nhiều lý do khiến tập lệnh của bạn dường như không gửi email. Thật khó để chẩn đoán những điều này trừ khi có lỗi cú pháp rõ ràng. Không có ai bạn cần chạy qua danh sách kiểm tra dưới đây để tìm thấy bất kỳ cạm bẫy tiềm năng nào bạn có thể gặp phải. Đảm bảo báo cáo lỗi được bật và đặt để báo cáo tất cả các lỗiBáo cáo lỗi là điều cần thiết để root các lỗi trong mã của bạn và các lỗi chung mà PHP gặp phải. Báo cáo lỗi cần được bật để nhận các lỗi này. Đặt mã sau ở đầu các tệp PHP của bạn (hoặc trong tệp cấu hình chính) sẽ cho phép báo cáo lỗi.
Xem làm thế nào tôi có thể nhận được thông báo lỗi hữu ích trong PHP? - Câu trả lời này để biết thêm chi tiết về điều này. Đảm bảo hàm mail() được gọiNó có vẻ ngớ ngẩn nhưng một lỗi phổ biến là quên thực sự đặt hàm Đảm bảo hàm mail() được gọi là chính xác
Hàm thư có ba tham số cần thiết và tùy chọn là một tham số thứ tư và thứ năm. Nếu cuộc gọi của bạn đến Nếu cuộc gọi của bạn đến Kiểm tra nhật ký thư của máy chủMáy chủ web của bạn nên đăng nhập tất cả các nỗ lực để gửi email qua nó. Vị trí của các nhật ký này sẽ khác nhau (bạn có thể cần hỏi quản trị viên máy chủ của mình ở vị trí của chúng) nhưng chúng thường có thể được tìm thấy trong thư mục gốc của người dùng theo 4. Bên trong sẽ là thông báo lỗi mà máy chủ báo cáo, nếu có, liên quan đến nỗ lực gửi email của bạn.Kiểm tra lỗi kết nối cổngBlock cổng là một vấn đề rất phổ biến mà hầu hết các nhà phát triển phải đối mặt trong khi tích hợp mã của họ để cung cấp email bằng SMTP. Và, điều này có thể dễ dàng truy tìm tại các maillog của máy chủ (vị trí của máy chủ của nhật ký thư có thể thay đổi từ máy chủ này sang máy chủ khác, như đã giải thích ở trên). Trong trường hợp bạn đang ở trên một máy chủ lưu trữ được chia sẻ, các cổng 25 và 587 vẫn bị chặn theo mặc định. Khối này được thực hiện một cách có chủ đích bởi nhà cung cấp dịch vụ lưu trữ của bạn. Điều này đúng ngay cả đối với một số máy chủ chuyên dụng. Khi các cổng này bị chặn, hãy thử kết nối bằng cổng 2525. Nếu bạn thấy cổng đó cũng bị chặn, thì giải pháp duy nhất là liên hệ với nhà cung cấp lưu trữ của bạn để bỏ chặn các cổng này. Hầu hết các nhà cung cấp lưu trữ chặn các cổng email này để bảo vệ mạng của họ không gửi bất kỳ email spam nào. Sử dụng các cổng 25 hoặc 587 cho các kết nối đơn giản/TLS và cổng 465 cho các kết nối SSL. Đối với hầu hết người dùng, đề xuất sử dụng cổng 587 để tránh các giới hạn tốc độ được đặt ra bởi một số nhà cung cấp lưu trữ. Không sử dụng toán tử triệt tiêu lỗiKhi toán tử triệt tiêu lỗi 5 được chuẩn bị cho một biểu thức trong PHP, bất kỳ thông báo lỗi nào có thể được tạo bởi biểu thức đó sẽ bị bỏ qua. Có những trường hợp sử dụng nhà điều hành này là cần thiết nhưng gửi thư không phải là một trong số họ.Nếu mã của bạn chứa 6 thì bạn có thể ẩn các thông báo lỗi quan trọng sẽ giúp bạn gỡ lỗi điều này. Xóa 5 và xem có bất kỳ lỗi nào được báo cáo không.Chỉ nên sử dụng khi bạn kiểm tra với 8 ngay sau đó cho các lỗi cụ thể.Kiểm tra giá trị trả về mail()Hàm
Điều này rất quan trọng cần lưu ý bởi vì:
Vì vậy, 2 sẽ giúp bạn đi đúng hướng trong khi 1 không nhất thiết có nghĩa là email của bạn đã được gửi thành công. Điều này rất quan trọng cần lưu ý!Đảm bảo nhà cung cấp dịch vụ lưu trữ của bạn cho phép bạn gửi email và không giới hạn gửi thưNhiều webhost được chia sẻ, đặc biệt là các nhà cung cấp webhosting miễn phí, hoặc không cho phép email được gửi từ máy chủ của họ hoặc giới hạn số tiền có thể được gửi trong bất kỳ khoảng thời gian nào. Điều này là do những nỗ lực của họ để hạn chế những kẻ gửi thư rác khỏi lợi dụng các dịch vụ rẻ hơn của họ. Nếu bạn nghĩ rằng máy chủ của bạn có giới hạn gửi email hoặc chặn việc gửi email, hãy kiểm tra Câu hỏi thường gặp của họ để xem họ có liệt kê bất kỳ giới hạn nào như vậy không. Nếu không, bạn có thể cần liên hệ với hỗ trợ của họ để xác minh xem có bất kỳ hạn chế nào xung quanh việc gửi email. Kiểm tra thư mục thư rác; Ngăn chặn email bị gắn cờ là thư rácThông thường, vì nhiều lý do, các email được gửi qua PHP (và các ngôn ngữ lập trình phía máy chủ khác) kết thúc trong thư mục thư rác của người nhận. Luôn kiểm tra ở đó trước khi khắc phục sự cố mã của bạn. Để tránh thư được gửi qua PHP được gửi đến thư mục spam của người nhận, có nhiều điều bạn có thể làm, cả trong mã PHP của bạn và nếu không, để giảm thiểu khả năng email của bạn được đánh dấu là thư rác. Lời khuyên tốt từ Michiel de Mare bao gồm:
Xem làm thế nào để bạn chắc chắn rằng email bạn gửi theo chương trình không tự động được đánh dấu là thư rác? Để biết thêm về chủ đề này. Đảm bảo tất cả các tiêu đề thư được cung cấpMột số phần mềm spam sẽ từ chối thư nếu thiếu các tiêu đề phổ biến như "từ" và "Trả lời":
Đảm bảo tiêu đề thư không có lỗi cú phápTiêu đề không hợp lệ cũng tệ như không có tiêu đề. Một ký tự không chính xác có thể là tất cả những gì cần thiết để làm hỏng email của bạn. Kiểm tra kỹ để đảm bảo cú pháp của bạn là chính xác vì PHP sẽ không bắt được các lỗi này cho bạn.
Không sử dụng người gửi giả $headers = array("From: $_POST[contactform_sender_email]"); // No! 0Mặc dù thư phải có từ: người gửi, bạn có thể không chỉ sử dụng bất kỳ giá trị nào. Cụ thể là địa chỉ người gửi do người dùng cung cấp là một cách chắc chắn để chặn thư:
Lý do: Web hoặc gửi máy chủ thư của bạn không phải là SPF/DKIM-Whitelisted để giả vờ chịu trách nhiệm về địa chỉ @hotmail hoặc @Gmail. Nó thậm chí có thể âm thầm bỏ thư với các miền người gửi 0 mà nó không được cấu hình.Đảm bảo giá trị người nhận là chính xácĐôi khi vấn đề đơn giản như có giá trị không chính xác cho người nhận email. Điều này có thể là do sử dụng một biến không chính xác.
Một cách khác để kiểm tra điều này là mã cứng giá trị người nhận vào lệnh gọi hàm
Điều này có thể áp dụng cho tất cả các tham số Gửi đến nhiều tài khoảnĐể giúp loại trừ các sự cố tài khoản email, hãy gửi email của bạn đến nhiều tài khoản email tại các nhà cung cấp email khác nhau. Nếu email của bạn không đến tài khoản Gmail của người dùng, hãy gửi cùng một email vào tài khoản Yahoo, tài khoản Hotmail và tài khoản POP3 thông thường (như tài khoản email do ISP cung cấp của bạn). Nếu các email đến tất cả hoặc một số tài khoản email khác, bạn biết mã của bạn đang gửi email nhưng có khả năng nhà cung cấp tài khoản email đang chặn chúng vì một số lý do. Nếu email không đến bất kỳ tài khoản email nào, vấn đề có nhiều khả năng liên quan đến mã của bạn. Đảm bảo mã khớp với phương thức biểu mẫuNếu bạn đã đặt phương thức biểu mẫu của mình thành 4, hãy đảm bảo bạn đang sử dụng 5 để tìm kiếm các giá trị biểu mẫu của mình. Nếu bạn đã đặt nó thành 6 hoặc hoàn toàn không đặt nó, hãy đảm bảo bạn sử dụng 7 để tìm kiếm các giá trị biểu mẫu của mình.Đảm bảo biểu mẫu của bạn $headers = array("From: $_POST[contactform_sender_email]"); // No! 8 giá trị điểm đến vị trí chính xácĐảm bảo thuộc tính 8 của bạn chứa một giá trị trỏ đến mã gửi thư PHP của bạn.
Đảm bảo máy chủ web hỗ trợ gửi emailMột số nhà cung cấp lưu trữ web không cho phép hoặc cho phép gửi email qua máy chủ của họ. Những lý do cho điều này có thể thay đổi nhưng nếu họ đã vô hiệu hóa việc gửi thư, bạn sẽ cần sử dụng một phương pháp thay thế sử dụng bên thứ ba để gửi các email đó cho bạn. Một email đến hỗ trợ kỹ thuật của họ (sau chuyến đi đến hỗ trợ trực tuyến hoặc Câu hỏi thường gặp của họ) sẽ làm rõ nếu khả năng email có sẵn trên máy chủ của bạn. Đảm bảo máy chủ thư $to = ''; // other variables .... mail($recipient, $subject, $message, $headers); // $recipient should be $to 0 được cấu hìnhNếu bạn đang phát triển trên máy trạm địa phương bằng WAMP, MAMP hoặc XAMPP, một máy chủ email có thể không được cài đặt trên máy trạm của bạn. Không có một, PHP không thể gửi thư theo mặc định. Bạn có thể khắc phục điều này bằng cách cài đặt một máy chủ thư cơ bản. Đối với Windows, bạn có thể sử dụng Mercury Mail miễn phí. Bạn cũng có thể sử dụng SMTP để gửi email của bạn. Xem câu trả lời tuyệt vời này từ Vikas Dwivingi để tìm hiểu cách làm điều này. Bật tùy chỉnh của PHP $to = ''; // other variables .... mail($recipient, $subject, $message, $headers); // $recipient should be $to 1Ngoài tệp nhật ký của MTA và PHP của bạn, bạn có thể bật ghi nhật ký cho chức năng
Xem http://php.net/manual/en/mail.configuration.php để biết chi tiết. (Tốt nhất là kích hoạt các tùy chọn này trong 3 hoặc 4 hoặc 5 có lẽ.)Kiểm tra với dịch vụ kiểm tra thưCó nhiều dịch vụ kiểm tra giao hàng và spam khác nhau mà bạn có thể sử dụng để kiểm tra thiết lập MTA/WebServer của mình. Thông thường, bạn gửi một đầu dò thư đến: địa chỉ của họ, sau đó nhận báo cáo giao hàng và nhiều lỗi hoặc phân tích cụ thể hơn sau:
Sử dụng một người gửi thư khácChức năng
Tất cả đều có thể được kết hợp với một nhà cung cấp dịch vụ/máy chủ SMTP chuyên nghiệp. . Tại sao thư PHP không gửi đi?Vì vậy, Captain Rõ ràng với Cứu hộ, những lý do thông thường đằng sau lý do tại sao thư PHP không gửi ra là một trong những điều sau đây: Không có máy chủ SMTP nào được cài đặt, không có cách nào để PHP hoặc máy chủ gửi email. Máy chủ SMTP có thể được cài đặt nhưng không được cấu hình đúng. Tường lửa hoặc chống vi-rút đang chặn gửi thư.
Làm cách nào để gửi email trong PHP mà không có máy chủ?Không có một, PHP không thể gửi thư theo mặc định. Bạn có thể khắc phục điều này bằng cách cài đặt một máy chủ thư cơ bản. Đối với Windows, bạn có thể sử dụng Mercury Mail miễn phí. Bạn cũng có thể sử dụng SMTP để gửi email của bạn. Xem câu trả lời tuyệt vời này từ Vikas Dwivingi để tìm hiểu cách làm điều này.
Làm thế nào để gửi email văn bản đơn giản trong PHP?Gửi email văn bản đơn giản. PHP sử dụng hàm mail () để gửi email. Hàm 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 tin nhắn và tin nhắn thực tế cũng có hai tham số tùy chọn khác.
Tại sao tôi có thể gửi email thông qua lưu trữ web của mình?Một số nhà cung cấp lưu trữ web không cho phép hoặc cho phép gửi email qua máy chủ của họ. Những lý do cho điều này có thể thay đổi nhưng nếu họ đã vô hiệu hóa việc gửi thư, bạn sẽ cần sử dụng một phương pháp thay thế sử dụng bên thứ ba để gửi các email đó cho bạn.
Tại sao thư của tôi không gửi trong PHP?Ví dụ, nó có thể là thiếu các tham 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 rơle SMTP. Trong tất cả các tùy chọn có thể là lý do tại sao thư PHP của bạn () không gửi email, chúng tôi thấy rằng hầu hết các vấn đề xuất phát từ postfix được cấu hình không chính xác.you're missing necessary parameters, have typos in your recipient's email address, or need to set up an SMTP relay. 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.
Làm thế nào để bạn kiểm tra php mail () đang hoạt động?Để kiểm tra xem nó có gửi thư như dự định không;if($sendMail) { echo "Email Sent Successfully"; } else { echo "Mail Failed"; } ?>
Làm cách nào để kích hoạt email PHP?PHP.Tệp INI là nơi bạn định cấu hình cài đặt PHP của mình.Đây là tệp bạn cần chỉnh sửa để định cấu hình PHP để gửi thư ... Mở PHP của bạn..... Tìm kiếm dòng đọc [hàm thư]. Thêm/thay đổi chi tiết của máy chủ thư của bạn..... Lưu/đóng PHP..... Khởi động lại máy chủ web của bạn .. Thư PHP có yêu cầu SMTP không?Khi bạn sử dụng chức năng thư PHP, bạn sẽ gửi email trực tiếp từ máy chủ web của mình.Điều này có thể gây ra các vấn đề nếu địa chỉ từ không được đặt đúng hoặc nếu email của bạn không được lưu trữ với Dreamhost.Gửi thư qua SMTP được khuyến nghị vì email được gửi từ máy chủ thư thay vì máy chủ web.Sending mail via SMTP is recommended as email is sent from the mail server rather than the web server. |