tra-loi-cau-hoi-phat-trien-web.com

Khắc phục lỗi "Địa chỉ không hợp lệ", sau khi nâng cấp lên Joomla 3.5.1

Sau khi nâng cấp lên Joomla 3.5.1, tôi nhận được Invalid Address lỗi trong một số tiện ích mở rộng của tôi sử dụng PHPMailer (hệ thống Gửi thư Joomla).

Làm thế nào tôi có thể sửa lỗi này?

10
mavrosxristoforos

Trả lời cho người dùng:

Nếu bạn gặp phải lỗi này vì bạn đang sử dụng một số tiện ích mở rộng gửi email, vui lòng truy cập trang nhà phát triển và trước tiên đảm bảo bạn đang sử dụng phiên bản mới nhất .

Nếu bạn chắc chắn 100% rằng bạn đang sử dụng phiên bản mới nhất nhưng vẫn gặp lỗi này, bạn nên liên hệ với nhà phát triển và hỏi họ về lỗi này. Gửi cho họ một liên kết đến trang này, có thể giúp nhà phát triển khắc phục lỗi này .

Nếu bạn cho rằng mình đủ kinh nghiệm với PHP, bạn có thể tự mình sửa mã, sử dụng "câu trả lời cho nhà phát triển" bên dưới.

Xin lưu ý rằng đây sẽ không phải là một giải pháp lâu dài, mà chỉ là một "bản vá", cho đến khi nhà phát triển phát hành một phiên bản mới.

Trả lời cho Nhà phát triển:

Joomla 3.5.1 cho phép các ngoại lệ của PHPMailer theo mặc định. Do đó, các lỗi đã được ẩn trước đó xuất hiện.

Một trường hợp mà điều này hiển thị bây giờ là với hàm addReplyTo.

Trong Joomla 2.5 addReplyTo có một tham số mảng.

Bắt đầu với Joomla 3.0 ( vâng, trở lại vào năm 2012 ) Hàm JMail của Joomla đã thay đổi để không xử lý các mảng khác với các tham số chuỗi. Do đó, nó dựa vào mã PHPMailer cơ bản, tuy nhiên cũng đã thay đổi và do đó không thể thêm Trả lời chính xác.

PHPMailer không đưa ra một Ngoại lệ cho điều đó, tuy nhiên cho đến khi Joomla 3.5.1 không ai thấy ngoại lệ đó nếu bạn không kích hoạt xử lý ngoại lệ theo cách thủ công!

Giải pháp

Bạn có thể tìm kiếm mã mở rộng của mình cho addReplyTo và thay đổi các dòng như thế này:

 $mailer->addReplyTo(array($replyTo, $replyToName));

đến đây:

if(version_compare(JVERSION, '3.0', 'ge')) {
  $mailer->addReplyTo($replyTo, $replyToName);
} else {
  $mailer->addReplyTo(array($replyTo, $replyToName));
}

Hơn nữa, bạn muốn thêm mã try {} catch() {} khi cần để xử lý Ngoại lệ đến từ JMail/PHPMailer.

Thêm thông tin:

Thảo luận về vấn đề trên Github

Chủ đề liên quan trong diễn đàn Joomla

16
mavrosxristoforos

Tôi cũng gặp lỗi này khi biến $ replyTo trống và phải sử dụng

if ( !empty($replyTo) ) {
  $mailer->addReplyTo($replyTo, $replyToName);
}
3
GreyHead