it-swarm.com.de

Versenden von E-Mails über SMTP mit PHPMailer

Ich versuche, SMTP-E-Mails mit PHPMailer zu senden, aber ich erhalte ständig diese Fehlermeldung. Haben Sie irgendwelche Ideen, wie Sie diese entfernen können?
Ich versuche eine Verbindung über SSL an Port 465 herzustellen.

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', '[email protected]');
define('SMTP_PASSWORD', '***CENSORED***');

define('MAIL_ORDERS_ADDRESS', '[email protected]');
define('MAIL_ORDERS_NAME', 'My Name');

Irgendwelche Ideen?

14
cypher

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

SMTP-Fehler: Authentifizierung fehlgeschlagen.

Dies bedeutet, dass die von Ihnen gesendeten Anmeldeinformationen vom SMTP-Server abgelehnt werden. Vergewissern Sie sich, dass Host, Port, Benutzername und Kennwort korrekt sind.

Wenn Sie TLS verwenden möchten, fügen Sie Folgendes hinzu:

$mail->SMTPSecure = 'tls';

Wenn Sie SSL verwenden möchten, fügen Sie Folgendes hinzu:

$mail->SMTPSecure = 'ssl';

Denk daran, dass:

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

Vielleicht dieses Beispiel kann helfen (GMail Secure SMTP).

25
AlexV

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

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

Es sieht so aus, als würde PHPMailer SSL unterstützen. zumindest von diesem . Also musst du das ändern:

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

das sehr gut finden:

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

Dies kann wie ein Shot im Dunkeln erscheinen , aber stellen Sie sicher, dass PHP OpenSSL erfüllt wurde, wenn SMTP SSL erfordert.

Um zu überprüfen, verwenden Sie phpinfo()

Ich hoffe es hilft!

2
Mikey1980

versuchen Sie Port 25 statt 456.

Ich habe den gleichen Fehler erhalten, als ich den Port 456 verwendet habe, und die Änderung auf 25 hat für mich funktioniert. 

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

dies ist typisch für den Versuch, eine Verbindung zu einem SSL-Dienst mit einem Client herzustellen, der kein SSL verwendet

SMTP-Fehler: Authentifizierung fehlgeschlagen.

keine Überraschung, da keine SMTP-Konversation gestartet werden konnte Die Authentifizierung ist keine Option.

phpmailer verwendet kein implizites SSL (auch bekannt als TLS bei Verbindung, SMTPS) Um smtp.class.php nicht umzuschreiben, um die Unterstützung dafür aufzunehmen, gibt es keine Möglichkeit, das zu tun, was Sie verlangen.

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

1
user340140

Ich hatte ungefähr eine Stunde lang ein ähnliches Problem, bis ich herausfand, was schief lief. Mein Problem war, dass ich SSL anstelle von ssl verwendete. Überprüfen Sie im Code Groß- und Kleinschreibung beachten. AlexV führte mich zur Ursache des Problems. Das Helo/Ehlo-Material scheint irrelevant zu sein.

1
F-3000

Ja, Sie benötigen OpenSSL, um korrekt zu funktionieren. Meine Backup-Test-Site hat funktioniert, mein Live-Server nicht. Unterschied? Der Live-Server verfügte nicht über OpenSSL in der Konfiguration von PHP.

1
Todd

Einfacher smtp-Client mit PHP-Stream-Socket mit tls/ssl-smtp-STARTTLS-Befehl: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSmtlSocketClient.php

arbeitet 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;
}
0
Max