Frage

Ich versuche, SMTP-E-Mails mit PHPMailer zu schicken, aber ich erhalte immer diese Fehlermeldung, irgendwelche Ideen, wie man es loswerden?
Ich versuche, über SSL auf Port 465 zu verbinden.

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:

  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', 'myEmail@myDomain.tld');
define('SMTP_PASSWORD', '***CENSORED***');

define('MAIL_ORDERS_ADDRESS', 'myEmail@myDomain.tld');
define('MAIL_ORDERS_NAME', 'My Name');

Irgendwelche Ideen?

War es hilfreich?

Lösung

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

  

SMTP Fehler:. Kann nicht authentifizieren

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

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:

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

dieses Beispiel kann helfen, (GMail sichere SMTP).

Andere Tipps

Versuchen Sie, eine E-Mail über diesen SMTP-Server manuell senden / von einem interaktiven Mailer (zum Beispiel Mozilla Thunderbird). Aus den Fehlern, so scheint es, wird der Server Ihre Anmeldeinformationen nicht akzeptieren. Ist das SMTP auf dem Port ausgeführt wird, oder ist es SSL + SMTP? Sie scheinen nicht, dass Sie in dem Code eine sichere Verbindung zu sein, habe geschrieben, und ich bin nicht sicher, ob PHPMailer tatsächlich SSL + SMTP unterstützt.

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

Es sieht aus wie PHPMailer Unterstützung bietet SSL; zumindest von dieser . Also, werden Sie dies ändern müssen:

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

in diesen:

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

try Port 25 statt 456.

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

Das mag wie eine Schuss im Dunkeln scheinen , aber stellen Sie sicher, dass PHP ist mit OpenSSL eingehalten, wenn SMTP SSL erforderlich ist.

Verwendung phpinfo() Um zu überprüfen,

Hope, es hilft!

Ja, Sie müssen OpenSSL korrekt zu arbeiten. Meine Backup-Testgelände gearbeitet, mein Live-Server nicht. Unterschied? Live-Server nicht über OpenSSL innerhalb der PHP-Konfiguration.

  

SMTP -> FROM SERVER:
  SMTP -> FROM SERVER:
  SMTP -> ERROR: EHLO nicht vom Server akzeptiert:

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

  

SMTP Fehler:. Kann nicht authentifizieren

keine Überraschung dort gescheitert ein SMTP-Gespräch beginnen authentigation ist keine Option.

phpmailer macht keine implizite SSL (auch bekannt als TLS auf connect, SMTPS) Kurze smtp.class.php neu zu schreiben Unterstützung für sie gibt es keine Möglichkeit, enthalten zu tun, was Sie fragen.

Verwenden Sie Port 587 mit expliziten SSL (auch bekannt als TLS, STARTTLS) statt.

Ich hatte sehr ähnliches Problem für so etwas wie eine Stunde, bis ich herausgefunden, was falsch gelaufen ist. Mein Problem war, dass ich verwende SSL anstelle von ssl . Check ist Groß- und Kleinschreibung im Code. AlexV führte mich an die Quelle des Problems. Das helo / ehlo -stuff scheint irrelevant.

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

arbeitet mit gmail.com mit authenticate:

<?php
// Login email and password
$login = "your-email@cool.xx";
$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: <hello@cool.com>\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: <to-email@boome.com>\r\n");
        echo fread($socket,8192);

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

        echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top