2012-11-21 45 views
10

SMTP Error: Could not connect to SMTP host. Message could not be sent.Nie można połączyć się z hostem SMTP.

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

Nie mogę znaleźć sposobu na wykonanie PHPMailera pod CentOS. Poczta działa dobrze pod Windows z XAMPP, ale zawsze mam ten błąd pod Linuksem.

Serwer SMTP to port nasłuchiwania Lotus Domino na porcie 25, urządzenie CentOS nie ma w ogóle zapory, a dziwne jest to, że nawet poczta() nie działa. Nic nie zwraca (podczas gdy w systemie Windows zwraca 1). Jeśli wyślę wiadomość e-mail za pośrednictwem telnetu za pośrednictwem serwera CentOS, to działa dobrze, więc nie sądzę, że jest to problem z siecią. Musi być powiązany z PHP, ale nie wiem jak.

<?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"; 
?> 

Tylko w celu wyjaśnienia powyższego kodu działa na XAMPP (Windows).

I debugowania błędu na PHPMailer i błędów dzieje się tutaj (metoda 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; 
} 

Wygląda na to, że nie może otworzyć Socket ...

AKTUALIZACJA: Używanie $ mail-> SMTPDebug = 2; sugerowane przez Alvaro produkowane ten wyjściowe:

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

+2

Czy próbowałeś podać dane logowania? –

+0

Brak. Co masz na myśli po drodze? Masz na myśli ustawić je jako ""? – raz3r

+0

FYI spróbuj '$ mail-> SMTPAuth = true; $ mail-> Username = ""; $ mail-> Password = ""; ' właśnie teraz, bez powodzenia. – raz3r

Odpowiedz

10

można włączyć tryb debugowania z właściwością SMTPDebug, np .:

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

komunikaty o błędach zostaną echo na ekranie.

Aktualizacja:

zezwolenie odmawia wiadomość błąd używając fsockopen() sugeruje, że użytkownik PHP działa jako nie może otworzyć gniazda. Jeśli sprawdziłeś dwukrotnie, czy nie ma zapory ogniowej, możliwe, że jest to SELinux problem: -?

+1

Ładne złapanie tutaj, teraz daje ten błąd 'SMTP -> BŁĄD: Nie można połączyć się z serwerem: Odmowa uprawnień (13)'. Czy może być powiązany z uprawnieniami użytkownika Linuxa? – raz3r

+2

Jesteś geniuszem, użyłem polecenia znalezionego na twoim łączu i zadziałało. Tak więc to był problem związany z siecią. Teraz wiem, co zrobić, jeśli w przyszłości dostanę ten sam błąd! Dziękuję wszystkim, dziękuję za pomoc;) – raz3r

30

OS CentOS 6.3

Nie można wysyłać e-maile

po jakimś reserch okazało się, że SELinux blokuje komunikację

SELinux jest włączony i skonfigurowany domyślnie. W związku z tym SELinux nie zezwala na Apache (httpd, phpmailer) do korzystania z funkcji sendmail i wykonywania jakichkolwiek połączeń sieciowych.

Za pomocą komendy getsebool możemy sprawdzić, czy demon httpd może nawiązać połączenie przez sieć i wysłać wiadomość e-mail.

getsebool httpd_can_sendmail 
getsebool httpd_can_network_connect 

To polecenie spowoduje włączenie lub wyłączenie boolean. Jeśli jego wyłączenia, możemy ustawić go przy użyciu następujących:

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

Teraz można przetestować php, kod, aby sprawdzić, czy praca SendMail prawidłowo, czy nie.

+0

Dzięki, rozwiązany przez problem – Piyuesh

+0

Jesteś moim bohaterem dzisiaj. –

+0

Ty mnie uratowałeś. Chciałbym również zwrócić uwagę, że komendy setsebool mogą działać nieco wolno w niektórych wersjach CENTOS-u, więc bądź cierpliwy podczas uruchamiania poleceń. – JoeMoe1984

Powiązane problemy