2010-08-13 4 views
30

Tôi đã sử dụng PHPMailer trên một số dự án nhưng bây giờ tôi bị kẹt. Nó cho tôi lỗi:
Lỗi SMTP: Không thể kết nối với máy chủ SMTP.
Tôi đã thử gửi email từ Thunderbird và nó hoạt động! Nhưng không phải thông qua PHPMailer ... Dưới đây là các thiết lập từ Thunderbird:PHPMailer: Lỗi SMTP: Không thể kết nối với máy chủ SMTP

Tên Server: mail.exampleserver.com
Cổng: 587
Tên đăng nhập: [email protected]
an toàn xác thực: Không
kết nối an ninh: STARTTLS

tôi đã so sánh chúng với các máy chủ tại dự án cuối cùng của tôi, nơi tôi đã sử dụng PHPMailer và họ là:

Tên máy chủ: mail.exampleserver2.com
Cổng: 465
Tên đăng nhập: [email protected]
an toàn xác thực: Không
Connection Security: SSL/TLS

mã php của tôi là:

$mail = new PHPMailer(); 
$mail->IsSMTP(); // send via SMTP 
$mail->Host = SMTP_HOST; // SMTP servers 
$mail->Port = SMTP_PORT; // SMTP servers 
$mail->SMTPAuth = true; // turn on SMTP authentication 
$mail->Username = SMTP_USER; // SMTP username 
$mail->Password = SMTP_PASSWORD; // SMTP password 
$mail->From = MAIL_SYSTEM; 
$mail->FromName = MAIL_SYSTEM_NAME; 
$mail->AddAddress($aSecuredGetRequest['email']); 
$mail->IsHTML(true); // send as HTML 

Tôi sai ở đâu?

+0

http://stackoverflow.com/questions/42471693/phpmailer-using-gmail-gives-error/42472146?noredirect=1#comment72085437_42472146 –

Trả lời

10

Vấn đề của bạn là rất có thể đây an

kết nối: STARTTLS Connection Security: SSL/TLS

Đó là 2 giao thức khác nhau, bạn đang sử dụng đúng, bất kể bạn đang sử dụng trong Thunderbird cần được sử dụng.

Hãy thử đặt biến:

// if you're using SSL 
$mail->SMTPSecure = 'ssl'; 
// OR use TLS 
$mail->SMTPSecure = 'tls'; 
4

không mail.exampleserver.com tồn tại ??? , nếu không thử mã sau (bạn phải có tài khoản gmail)

$mail->SMTPSecure = "ssl"; 
$mail->Host='smtp.gmail.com'; 
$mail->Port='465'; 
$mail->Username = '[email protected]'; // SMTP account username 
$mail->Password = 'your gmail password'; 
$mail->SMTPKeepAlive = true; 
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->CharSet = 'utf-8'; 
$mail->SMTPDebug = 0; 
42

Trong trường hợp của tôi thiếu hỗ trợ SSL trong PHP đã đưa ra lỗi này.

Vì vậy, tôi cho phép extension = php_openssl.dll

$mail->SMTPDebug = 1; cũng gợi ý đối với giải pháp này.

Update 2017

$mail->SMTPDebug = 2;, xem: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

+1

Cho phép mở rộng PHP này (Tùy chọn menu WAMP) là những gì tôi cần. Cảm ơn bạn. – jwinn

+0

Bạn là anh hùng của tôi. Tôi đã đấu tranh với e-mail trên localhost của tôi trong nhiều giờ, nhưng điều này giải quyết tất cả các vấn đề của tôi! –

+0

Nó đã tiết kiệm cho tôi rất nhiều thời gian! – Bronek

0

Tôi đã có một vấn đề tương tự. Tôi đã cài đặt PHPMailer phiên bản 1.72 chưa được chuẩn bị để quản lý các kết nối SSL. Nâng cấp lên phiên bản cuối cùng đã giải quyết được sự cố.

6

Tôi gặp sự cố tương tự và đã phát hiện ra rằng đó là chỉ thị cấu hình openssl.cafile trong số php.ini cần được đặt để cho phép xác minh các đồng nghiệp an toàn. Bạn chỉ cần đặt nó vào vị trí của tệp chứng chỉ của tổ chức phát hành chứng chỉ giống như bạn có thể nhận được tại http://curl.haxx.se/docs/caextract.html.

Chỉ thị này mới với PHP 5.6 nên điều này làm tôi mất cảnh giác khi nâng cấp từ PHP 5.5.

+0

Tôi đang ở trong cùng một vấn đề, bằng cách sử dụng PHP5.6 nếu tôi đặt xác minh ngang hàng đặt sai trong email phpmailer đi vào thư mục thư rác, Bất kỳ ý tưởng làm thế nào tôi có thể thiết lập đường dẫn chứng chỉ? nơi để có được giấy chứng nhận? trong Debian 8 VPS –

+0

Thx. Đối với tôi đã làm việc. Đó là: cd/etc/php5 && wget https://curl.haxx.se/ca/cacert.pem && echo "openssl.cafile = /etc/php5/cacert.pem" >>/etc/php5/apache2/php.ini –

33

Vì câu hỏi này hiển thị cao trong google, tôi muốn chia sẻ giải pháp của mình cho trường hợp PHP vừa được nâng cấp lên phiên bản 5.6 (có hành vi SSL nghiêm ngặt hơn).

Các PHPMailer wiki có một phần về điều này:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

Cách giải quyết đề nghị là bao gồm các đoạn mã sau:

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

này nên làm việc cho PHPMailer 5.2.10 (và lên).

Lưu ý: Rõ ràng, và cũng như được đề xuất trong wiki đó, đây phải là giải pháp tạm thời!

The correct fix for this is to replace the invalid, misconfigured or self-signed certificate with a good one.

+3

Bạn thưa ngài, đã cứu mạng tôi! –

+2

Đây là câu trả lời hay nhất cho những người đang gặp khó khăn với việc gửi thư địa phương và phải đối mặt với các vấn đề ký tự. – andromeda

+0

Vì lý do nào đó, nó hoạt động –

2

Tôi đã gặp phải vấn đề tương tự và đó là vì PHPMailer nhận ra máy chủ hỗ trợ STARTTLS để nó cố gắng tự động nâng cấp kết nối với kết nối được mã hóa. Máy chủ thư của tôi nằm trên cùng một mạng con với máy chủ web trong mạng của tôi, tất cả nằm sau tường lửa miền của chúng tôi nên tôi không quá lo lắng về việc sử dụng mã hóa (cộng với email được tạo không chứa dữ liệu nhạy cảm).

Vì vậy, những gì tôi đã đi trước và đã làm thay đổi SMTPAutoTLS thành false trong tệp class.phpmailer.php.

/** 
* Whether to enable TLS encryption automatically if a server supports it, 
* even if `SMTPSecure` is not set to 'tls'. 
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. 
* @var boolean 
*/ 
public $SMTPAutoTLS = false; 
0

Vì đây là lỗi phổ biến, hãy xem PHPMailer Wiki để khắc phục sự cố.

Ngoài này làm việc cho tôi

$mailer->Port = '587';