2012-11-21 73 views
10

SMTP Error: Could not connect to SMTP host. Message could not be sent.Không thể kết nối với máy chủ SMTP

Mailer Error: SMTP Error: Could not connect to SMTP host.

Tôi dường như không thể tìm cách làm cho PHPMailer hoạt động trong CentOS. Mail hoạt động tốt trong Windows với XAMPP nhưng tôi luôn gặp lỗi này dưới Linux.

Máy chủ SMTP là Lotus Domino đang nghe trên cổng 25, máy CentOS KHÔNG có tường lửa nào và điều lạ là ngay cả thư() không hoạt động. Nó trả về không có gì (trong khi trên Windows trả về 1). Nếu tôi gửi một email thông qua telnet thông qua máy chủ CentOS nó hoạt động tốt vì vậy tôi không nghĩ rằng đó là một vấn đề mạng. Nó phải liên quan đến PHP nhưng tôi không biết làm thế nào.

<?php 
require("class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->Host = "192.168.x.x"; 
$mail->SMTPAuth = false; 
$mail->From = "[email protected]"; 
$mail->FromName = "XXX"; 
$mail->AddAddress("[email protected]"); 
$mail->IsHTML(true); 
$mail->Subject = "Test"; 
$mail->Body = "Test"; 
if(!$mail->Send()) 
{ 
    echo "Message could not be sent. <p>"; 
    echo "Mailer Error: " . $mail->ErrorInfo; 
    exit; 
} 
echo "Message has been sent"; 
?> 

Chỉ cần làm rõ mã ở trên hoạt động trên XAMPP (Windows).

tôi sửa lỗi sai trên PHPMailer và lỗi xảy ra ở đây (phương pháp class.smtp.php Connect()):

$this->smtp_conn = @fsockopen($host, // the host of the server 
          $port, // the port to use 
          $errno, // error number if any 
          $errstr, // error message if any 
          $tval); // give up after ? secs 
// verify we connected properly 
if(empty($this->smtp_conn)) { 
    $this->error = array("error" => "Failed to connect to server", 
         "errno" => $errno, 
         "errstr" => $errstr); 
    if($this->do_debug >= 1) { 
    echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />'; 
    } 
    return false; 
} 

Có vẻ như nó không thể mở Socket ...

CẬP NHẬT: Sử dụng $ mail-> SMTPDebug = 2; theo đề nghị của Alvaro sản xuất sản lượng này:

SMTP -> ERROR: Failed to connect to server: Permission denied (13)

+2

Bạn đã thử chỉ định bằng chứng xác thực đăng nhập chưa? –

+0

Không có. Ý bạn là sao? Bạn có nghĩa là đặt chúng là ""? – raz3r

+0

FYI đã thử '$ mail-> SMTPAuth = true; $ mail-> Username = ""; $ mail-> Password = ""; ' vừa nãy, không may mắn. – raz3r

Trả lời

10

Bạn có thể bật chế độ gỡ lỗi với SMTPDebug tài sản, ví dụ .:

$mail = new PHPMailer(); 
// 1 = errors and messages 
// 2 = messages only 
$mail->SMTPDebug = 2; 

Thông báo lỗi sẽ được lặp lại vào màn hình.

Cập nhật:

Một cho phép từ chối nhắn lỗi sử dụng fsockopen() gợi ý rằng người dùng PHP chạy như không được phép mở một socket. Nếu bạn đã kiểm tra kỹ rằng không có tường lửa, có thể đó là SELinux problem: -?

+1

Đẹp bắt ở đây, bây giờ nó cho lỗi này 'SMTP -> LRI: Không thể kết nối với máy chủ: Quyền bị từ chối (13)'. Nó có thể liên quan đến quyền của người dùng Linux không? – raz3r

+2

Bạn là một thiên tài, tôi đã sử dụng lệnh mà tôi tìm thấy trên liên kết của bạn và nó hoạt động. Vì vậy, nó là một vấn đề liên quan đến mạng lưới sau khi tất cả. Bây giờ tôi biết phải làm gì nếu tôi gặp lỗi tương tự trong tương lai! Cảm ơn tất cả các bạn, đánh giá cao sự giúp đỡ;) – raz3r

30

OS CentOS 6.3

Không thể gửi email

sau một reserch bật ra rằng SELinux đang chặn thông tin liên lạc

SELinux được kích hoạt và cấu hình theo mặc định. Như vậy SELinux không cho phép Apache (httpd, phpmailer) sử dụng chức năng sendmail và thực hiện bất kỳ loại kết nối mạng nào.

Sử dụng lệnh getsebool, chúng tôi có thể kiểm tra xem con quỷ httpd có được phép thực hiện kết nối qua mạng và gửi email hay không.

getsebool httpd_can_sendmail 
getsebool httpd_can_network_connect 

Lệnh này sẽ trả về giá trị boolean hoặc tắt. Nếu nó tắt, chúng tôi có thể thiết lập nó bằng cách sử dụng sau đây:

sudo setsebool -P httpd_can_sendmail 1 
sudo setsebool -P httpd_can_network_connect 1 

Bây giờ bạn có thể kiểm tra php, mã của bạn để xem SendMail hoạt động đúng hay không.

+0

Cảm ơn, nó đã giải quyết được vấn đề – Piyuesh

+0

Bạn là người hùng của tôi hôm nay. –

+0

Bạn đã cứu tôi. Tôi cũng muốn chỉ ra rằng các lệnh setsebool có thể chạy một chút chậm trên một số phiên bản của CENTOS vì vậy chỉ cần kiên nhẫn khi chạy các lệnh. – JoeMoe1984

Các vấn đề liên quan