2010-09-01 58 views
14

Tôi đang cố gắng gửi e-mail SMTP bằng cách sử dụng PHPMailer, nhưng tôi vẫn nhận được thông báo lỗi này, bất kỳ ý tưởng nào để loại bỏ nó?
Tôi đang cố gắng để kết nối qua SSL trên cổng 465.Gửi email qua SMTP với PHPMailer

SMTP -> FROM SERVER: 
SMTP -> FROM SERVER: 
SMTP -> ERROR: EHLO not accepted from server: 

Notice: fputs() [function.fputs]: send of 18 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 494 
SMTP -> FROM SERVER: 
SMTP -> ERROR: HELO not accepted from server: 

Notice: fputs() [function.fputs]: send of 12 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 212 
SMTP -> ERROR: AUTH not accepted from server: 
SMTP Error: Could not authenticate. 

Mã của tôi:

require_once('../library/PHPMailer_v5.1/class.phpmailer.php'); 

     try{ 
      $mail = new PHPMailer(true); 
      $mail->IsSMTP(); 
      $mail->SMTPAuth = true; 
      $mail->Host = SMTP_SERVER; 
      $mail->Port = SMTP_PORT; 
      $mail->Username = SMTP_USERNAME; 
      $mail->Password = SMTP_PASSWORD; 
      $mail->SMTPDebug = 2; 
      $mail->SetFrom(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME); 
      $mail->Subject = 'AMAZONEK.cz - objednávka číslo '.$_SESSION['orderId']; 
      $mail->MsgHTML('<b>Ahoj</b>'); 
      $mail->AddAddress($_SESSION['user']['email'], $_SESSION['user']['name'].' '.$_SESSION['user']['surname']); 
      $mail->AddBCC(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME); 

      if(!$mail->Send()) throw new Exception($mail->ErrorInfo); 
     } 
     catch(Exception $e){ 
      echo $e->getMessage(); 
     } 

hằng định nghĩa:

define('SMTP_SERVER', 'smtp.ebola.cz'); 
define('SMTP_PORT', 465); 
define('SMTP_USERNAME', '[email protected]'); 
define('SMTP_PASSWORD', '***CENSORED***'); 

define('MAIL_ORDERS_ADDRESS', '[email protected]'); 
define('MAIL_ORDERS_NAME', 'My Name'); 

Bất kỳ ý tưởng?

Trả lời

25

Theo như tôi có thể thấy mọi thứ phù hợp với mã của bạn. Lỗi của bạn là:

SMTP Error: Could not authenticate.

Điều đó có nghĩa là thông tin đăng nhập bạn đã gửi bị máy chủ SMTP từ chối. Đảm bảo máy chủ, cổng, tên người dùng và mật khẩu là tốt.

Nếu bạn muốn sử dụng TLS, hãy thử thêm:

$mail->SMTPSecure = 'tls'; 

Nếu bạn muốn sử dụng SSL, hãy thử thêm:

$mail->SMTPSecure = 'ssl'; 

Hãy ghi nhớ rằng:

  • Một số Máy chủ SMTP có thể cấm kết nối từ "người ngoài".
  • Một số máy chủ SMTP không hỗ trợ kết nối SSL (hoặc TLS).

Có thể this example có thể giúp (Gmail bảo mật SMTP).

+0

Điều này thực sự đã giúp, tôi đã không nhận ra rằng tôi cần tiền tố 'ssl' nếu nhà cung cấp SMTP không chỉ định như vậy. Cảm ơn bạn. – cypher

+1

bạn cũng có thể thêm tiền tố tên máy chủ của mình bằng giao thức (ví dụ: '$ mail-> Host =" tls: // ".SMTP_SERVER;') AND sử dụng 'cổng 465' –

4

Cố gắng gửi e-mail thông qua máy chủ SMTP đó theo cách thủ công/từ một trình gửi thư tương tác (ví dụ: Mozilla Thunderbird). Từ các lỗi, có vẻ như máy chủ sẽ không chấp nhận thông tin đăng nhập của bạn. Có phải SMTP đang chạy trên cổng, hay là SSL + SMTP? Dường như bạn không sử dụng kết nối an toàn trong mã bạn đã đăng và tôi không chắc liệu PHPMailer có thực sự hỗ trợ SSL + SMTP hay không.

(First kết quả của googling hostname máy chủ SMTP của bạn: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html dường như muốn nói "SMTPs gửi mail: kết nối an toàn SSL, cổng: 465".)

Dường như PHPMailer không hỗ trợ SSL; ít nhất là từ this. Vì vậy, bạn sẽ cần phải thay đổi điều này:

define('SMTP_SERVER', 'smtp.ebola.cz'); 

vào đây:

define('SMTP_SERVER', 'ssl://smtp.ebola.cz'); 
+1

Có PHPMailer hỗ trợ SMTP (TLS) SMTP. – AlexV

2

này có vẻ giống như một shot trong bóng tối nhưng chắc chắn rằng PHP đã được tuân thủ OpenSSL nếu SMTP đòi hỏi SSL.

Để kiểm tra sử dụng phpinfo()

Hy vọng điều đó sẽ hữu ích!

+0

tại sao bỏ phiếu xuống? – Mikey1980

1

Có, bạn cần OpenSSL hoạt động chính xác. Trang web thử nghiệm sao lưu của tôi đã hoạt động, máy chủ trực tiếp của tôi không hoạt động. Sự khác biệt?Máy chủ trực tiếp không có OpenSSL trong cấu hình PHP.

0

SMTP -> FROM SERVER:
SMTP -> FROM SERVER:
SMTP -> ERROR: EHLO not accepted from server:

đó là đặc trưng của cố gắng để kết nối với một dịch vụ SSL với một khách hàng mà không phải sử dụng SSL

SMTP Error: Could not authenticate.

không ngạc nhiên đó đã thất bại trong việc bắt đầu một cuộc trò chuyện SMTP authentigation không phải là một lựa chọn ,.

phpmailer không thực hiện SSL ngầm (còn gọi là TLS trên kết nối, SMTPS) Viết lại smtp.class.php ngắn để bao gồm hỗ trợ cho nó ở đó không có cách nào để làm những gì bạn yêu cầu.

Sử dụng cổng 587 với SSL rõ ràng (aka TLS, STARTTLS) thay thế.

0

Tôi đã gặp sự cố rất giống với một vài giờ, cho đến khi tôi tìm ra điều gì đã xảy ra. Vấn đề của tôi là, tôi đã sử dụng SSL, thay vì ssl. Kiểm tra là trường hợp nhạy cảm trong mã. AlexV đã hướng dẫn tôi về nguồn gốc của sự cố. Helo/ehlo-stuff dường như không liên quan.

2

thử cổng 25 thay vì 456.

Tôi đã nhận lỗi tương tự khi sử dụng cổng 456, và thay đổi nó đến 25 làm việc cho tôi.

0

Simple smtp khách hàng với php dòng ổ cắm với lệnh TLS/SSL smtp STARTTLS: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

làm việc với gmail.com với xác thực:

<?php 
// Login email and password 
$login = "[email protected]"; 
$pass = "123456"; 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'verify_peer', false); 
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false); 
try{ 
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
    if (!$socket) { 
     print "Failed to connect $err $errstr\n"; 
     return; 
    }else{ 
     // Http 
     // fwrite($socket, "GET/HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); 
     // Smtp 
     echo fread($socket,8192); 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     // Start tls connection 
     echo fwrite($socket, "STARTTLS\r\n"); 
     echo fread($socket,8192); 

     echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); 

     // Send ehlo 
     echo fwrite($socket, "EHLO cool.xx\r\n"); 
     echo fread($socket,8192); 

     // echo fwrite($socket, "MAIL FROM: <[email protected]>\r\n"); 
     // echo fread($socket,8192); 

     echo fwrite($socket, "AUTH LOGIN\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, base64_encode($login)."\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, base64_encode($pass)."\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "rcpt to: <[email protected]>\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "DATA\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "Date: ".time()."\r\nTo: <[email protected]>\r\nFrom:<[email protected]\r\nSubject:Hello from php socket tls\r\n.\r\n"); 
     echo fread($socket,8192); 

     echo fwrite($socket, "QUIT \n"); 
     echo fread($socket,8192); 

     /* Turn off encryption for the rest */ 
     // stream_socket_enable_crypto($fp, false); 

     fclose($socket); 
    } 
}catch(Exception $e){ 
    echo $e; 
} 
Các vấn đề liên quan