2010-09-01 10 views
14

Ich versuche SMTP-E-Mails mit PHPMailer zu senden, aber ich bekomme diese Fehlermeldung, irgendwelche Ideen, wie man es loswerden?
Ich versuche, über SSL auf Port 465.Senden von E-Mails über SMTP mit 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. 

Mein Code zu verbinden:

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(); 
     } 

Konstanten Definition:

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'); 

Irgendwelche Ideen?

Antwort

25

Soweit ich sehen kann, ist alles richtig mit Ihrem Code. Ihr Fehler ist:

SMTP Error: Could not authenticate.

Was bedeutet, dass die Anmeldeinformationen Sie haben das Senden durch den SMTP-Server abgelehnt. Stellen Sie sicher, dass der Host, der Port, der Benutzername und das Passwort gut sind.

Wenn Sie TLS verwenden möchten, versuchen Sie:

$mail->SMTPSecure = 'tls'; 

Wenn Sie SSL verwenden möchten, versuchen Sie:

$mail->SMTPSecure = 'ssl'; 

Beachten Sie, dass:

  • Some SMTP-Server können Verbindungen von "Außenseitern" verbieten.
  • Einige SMTP-Server unterstützen keine SSL- (oder TLS-) Verbindungen.

Vielleicht this example kann helfen (GMail Secure SMTP).

+0

Dies tatsächlich geholfen, ich nicht, dass ich wusste brauche 'ssl' Präfix, wenn der SMTP-Provider dies nicht angibt. Vielen Dank. – cypher

+1

Sie könnten auch Ihren Hostnamen mit dem Protokoll voranstellen (d. H. '$ Mail-> Host =" tls: // ".SMTP_SERVER;') UND verwenden 'port 465' –

4

Versuchen Sie, eine E-Mail über diesen SMTP-Server manuell/von einem interaktiven Mailer (z. B. Mozilla Thunderbird) zu senden. Aufgrund der Fehler scheint der Server Ihre Anmeldedaten nicht zu akzeptieren. Läuft SMTP auf dem Port oder ist es SSL + SMTP? Sie scheinen in dem von Ihnen geposteten Code keine sichere Verbindung zu verwenden, und ich bin mir nicht sicher, ob PHPMailer tatsächlich SSL + SMTP unterstützt.

(Erstes Ergebnis der SMTP-Servers Hostnamen googeln: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html scheint "SMTPs Mail zu senden: sichere SSL-Verbindung, Port: 465" zu sagen.)

Es sieht aus wie PHPMailer SSL unterstützt; zumindest von this. Also, müssen Sie dies ändern:

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

in diese:

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

Ja PHPMailer unterstützt SSL (TLS) SMTP. – AlexV

2

Dies mag wie ein Schuss im Dunkeln aber stellen Sie sicher, dass PHP mit OpenSSL halten wurde, wenn SMTP erfordert SSL.

Zur Verwendung phpinfo()

Hoffe, es hilft zu überprüfen!

+0

warum die down vote? – Mikey1980

1

Ja, Sie brauchen OpenSSL, um korrekt zu funktionieren. Meine Backup-Test-Site funktionierte, mein Live-Server nicht. Unterschied?Live-Server hatte OpenSSL nicht innerhalb der PHP-Konfiguration.

0

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

, die mit einem Client zu einem SSL-Dienst zu verbinden versuchen, typisch ist, die nicht SSL

SMTP Error: Could not authenticate.

keine Überraschung dort gescheitert Verwendung ist eine SMTP-Konversation authentigation keine Option starten ,.

phpmailer tut nicht implizit SSL (aka TLS auf connect, SMTPS) Kurz von smtp.class.php neu zu schreiben, um Unterstützung dafür zu enthalten, es gibt keine Möglichkeit zu tun, was Sie fragen.

Verwenden Sie stattdessen Port 587 mit explizitem SSL (auch bekannt als TLS, STARTTLS).

0

Ich hatte sehr ähnliches Problem für so etwas wie eine Stunde, bis ich herausgefunden habe, was schief gelaufen ist. Mein Problem war, dass ich SSL statt ssl verwendet habe. Überprüfen Sie Groß-und Kleinschreibung im Code. AlexV führte mich zur Quelle des Problems. Dieses helo/ehlos-Zeug scheint irrelevant zu sein.

2

try Port 25 statt 456.

habe ich den gleichen Fehler, wenn Port 456, und es bis 25 arbeitete für mich zu ändern.

0

Einfache SMTP-Client mit PHP-Stream-Socket mit TLS/SSL-SMTP STARTTLS Befehl: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

Arbeiten mit gmail.com mit authenticate:

<?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; 
} 
Verwandte Themen