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

Kết nối SMTP () không thành công. Tin nhắn chưa được gửi. Lỗi của người gửi: Kết nối SMTP () không thành công

Đang cố gắng gửi thư đến một địa chỉ gmail nhưng nó vẫn liên tục gặp lỗi này "SMTP -> LRI: Không thể kết nối với máy chủ: Đã hết thời gian kết nối (110) Kết nối SMTP () không thành công. Tin nhắn không được gửi. Lỗi kết nối: SMTP () thất bại." Điều gì có thể là vấn đề?

        require 'class.phpmailer.php'; // path to the PHPMailer class
        require 'class.smtp.php';

            $mail = new PHPMailer();


            $mail->IsSMTP();  // telling the class to use SMTP
            $mail->SMTPDebug = 2;
            $mail->Mailer = "smtp";
            $mail->Host = "ssl://smtp.gmail.com";
            $mail->Port = 587;
            $mail->SMTPAuth = true; // turn on SMTP authentication
            $mail->Username = "[email protected]"; // SMTP username
            $mail->Password = "mypasswword"; // SMTP password 
            $Mail->Priority = 1;

            $mail->AddAddress("[email protected]","Name");
            $mail->SetFrom($visitor_email, $name);
            $mail->AddReplyTo($visitor_email,$name);

            $mail->Subject  = "Message from  Contact form";
            $mail->Body     = $user_message;
            $mail->WordWrap = 50;  

            if(!$mail->Send()) {
            echo 'Message was not sent.';
            echo 'Mailer error: ' . $mail->ErrorInfo;
            } else {
            echo 'Message has been sent.';
            }
19
Sayari

Xóa hoặc nhận xét dòng-

$mail->IsSMTP();

Và nó sẽ làm việc cho bạn. 

Tôi đã kiểm tra và thử nghiệm nhiều câu trả lời từ các trang web khác nhau nhưng không có giải pháp nào ngoại trừ giải pháp trên.

51
Snehasis

Bạn phải cài đặt php_openssl.dll, nếu bạn sử dụng wamperver, việc tìm kiếm và áp dụng tiện ích mở rộng cho PHP khá dễ dàng.

Trong ví dụ thay đổi này: 

    //Set the hostname of the mail server
    $mail->Host = 'smtp.gmail.com';

    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 465 ssl
    $mail->Port = 465;

    //Set the encryption system to use - ssl (deprecated) or tls
    $mail->SMTPSecure = 'ssl';

và sau đó bạn đã nhận được một email từ gmail nói về việc kích hoạt tùy chọn Ứng dụng truy cập ít an toàn hơnhere https://www.google.com.vn/sinstall/security/lesssecur Ứng dụng lại

Tôi khuyên bạn nên thay đổi mật khẩu và mã hóa liên tục

9
El David

Bạn không có cài đặt SMTPSecure để xác định loại xác thực đang được sử dụng và bạn đang chạy cài đặt Máy chủ với 'ssl: //' (PS - ssl không qua cổng 465, nếu bạn cần chạy nó ssl thay vào đó, hãy xem câu trả lời được chấp nhận tại đây . Đây là các dòng để thêm/thay đổi:

+ $mail->SMTPSecure = 'tls';

- $mail->Host = "ssl://smtp.gmail.com";
+ $mail->Host = "smtp.gmail.com";
4
Dmitri DB

Bạn đang chạy trên Localhost? và bạn đã chỉnh sửa php.ini chưa?

Nếu chưa, hãy thử điều này:
1. Mở xampp-> php-> php.ini
2. Tìm kiếm extension=php_openssl.dll
3. Chữ cái đầu tiên sẽ trông như thế này ;extension=php_openssl.dll
4. Gỡ bỏ ';' và nó sẽ trông như thế này extension=php_openssl.dll
5. Nếu bạn không thể tìm thấy extension=php_openssl.dll, hãy thêm dòng này extension=php_openssl.dll.
6. Sau đó khởi động lại Xampp của bạn.

Chúc may mắn ;)

4
Sendoh Akira

tôi đã gặp vấn đề này khi nói rằng tôi đã nhận được một email từ google nói với tôi rằng ai đó cố gắng đăng nhập vào tài khoản của bạn là bạn và tôi trả lời là có, sau đó nó bắt đầu làm việc vì vậy nếu đây là trường hợp bạn xem trong email của mình và cho phép máy chủ

3
user5778000

Đăng nhập tài khoản Google của bạn tại myaccount.google.com/security đi đến "Đăng nhập" và sau đó "Bảo mật", cuộn xuống dưới cùng sau đó bật tùy chọn "Cho phép ứng dụng kém an toàn".

2
user7347514

Dưới đây là danh sách này bạn nên xem xét khi giao dịch với PHPMailer:

  1. Kích hoạt openSSL bằng cách bỏ bình luận extension=php_openssl.dll trong PHP.ini của bạn
  2. Sử dụng $mail->SMTPSecure = 'tls';$mail->Port = 587;
  3. Cho phép gỡ lỗi nếu bạn đang sai ở một nơi khác như tên người dùng và mật khẩu không chính xác, v.v.
2
ɢʜʘʂʈ ʀɛɔʘɴ

Bạn đang làm tốt tất cả. Chỉ cần bạn kiểm tra các cổng SMTP khác nhau như 465 và các cổng khác hoạt động trên hệ thống của bạn . Một lưu ý khác là cho phép truy cập vào các ứng dụng kém an toàn hơn bằng tài khoản google nếu không nó sẽ gây ra lỗi tương tự.
Tôi đã trải qua cả một ngày và điều duy nhất tôi làm sai là cổng số. Tôi chỉ thay đổi cổng số. Và nó hoạt động.

1
deepak kumar

Tôi biết đã được một thời gian kể từ câu hỏi này nhưng tôi đã có vấn đề chính xác và giải quyết nó bằng cách vô hiệu hóa SMTP_BLOCK trên csf.conf (chúng tôi sử dụng CSF cho tường lửa). 

Để vô hiệu hóa, chỉ cần chỉnh sửa csf.conf và tắt SMTP_BLOCK như vậy:

###############################################################################
# SECTION:SMTP Settings
###############################################################################
# Block outgoing SMTP except for root, exim and mailman (forces scripts/users
# to use the exim/sendmail binary instead of sockets access). This replaces the
# protection as WHM > Tweak Settings > SMTP Tweaks
#
# This option uses the iptables ipt_owner/xt_owner module and must be loaded
# for it to work. It may not be available on some VPS platforms
#
# Note: Run /etc/csf/csftest.pl to check whether this option will function on
# this server
# SMTP_BLOCK = "1" --> this will cause phpmailer Connection timed out (110)
SMTP_BLOCK = "0"
1
Goldbug

Để nó hoạt động, tôi phải truy cập myaccount.google.com -> "ứng dụng và trang web được kết nối" và chuyển "Cho phép ứng dụng kém an toàn hơn" thành "BẬT" (gần cuối trang).

0
Akif Hussain Sayyed

Mailjet

CÀI ĐẶT SMTP

Cổng: 25 hoặc 587 (một số nhà cung cấp chặn cổng 25) 

Tôi làm việc bằng cách thay đổi cổng sau khi triển khai ứng dụng lên máy chủ.

  • Trong Debug, nó hoạt động với tôi: $mail->Port = 25;
  • Trong bản phát hành, nó hoạt động với tôi: $mail->Port = 587;

GL

0
IT Developers

Nếu nó hoạt động trên localhost của bạn nhưng không phải trên máy chủ web của bạn: 

Một số trang web lưu trữ chặn một số cổng SMTP gửi đi . Nhận xét dòng $mail->IsSMTP(); như được lưu ý trong câu trả lời được chấp nhận có thể làm cho nó hoạt động, nhưng nó chỉ đơn giản là vô hiệu hóa cấu hình SMTP của bạn và sử dụng cấu hình email của trang web lưu trữ. 

Nếu bạn đang sử dụng GoDaddy, không có cách nào để gửi thư bằng cách sử dụng một SMTP khác. Tôi đang sử dụng SiteGround và thấy rằng họ chỉ cho phép truy cập SMTP từ các cổng 25 và 465, với loại mã hóa SSL, vì vậy tôi sẽ tìm tài liệu cho Máy chủ của bạn và đi từ đó.

0
Stephanie