Envoyer des e-mails via SMTP avec PHPMailer

j'essaie d'envoyer des e-mails SMTP en utilisant PHPMailer, mais je continue à recevoir ce message d'erreur, des idées comment s'en débarrasser?

J'essaie de me connecter via SSL sur le port 465.

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.

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

constantes définition:

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

des idées?

14
demandé sur cypher 2010-09-01 17:45:07

8 réponses

d'après ce que je vois, tout va bien avec votre code. Votre erreur est:

Erreur

SMTP: Impossible à authentifier.

ce qui signifie que les informations d'identification que vous avez envoyées sont rejetées par le serveur SMTP. Assurez-vous que l'hôte, port, nom d'utilisateur et mot de passe sont bons.

si vous voulez utiliser TLS, essayez d'ajouter:

$mail->SMTPSecure = 'tls';

si vous voulez utiliser SSL, essayez d'ajouter:

$mail->SMTPSecure = 'ssl';

gardez à l'esprit que:

  • certains serveurs SMTP peuvent interdire les connexions des "outsiders".
  • certains serveurs SMTP ne prennent pas en charge les connexions SSL (ou TLS).

peut-être cet exemple peut aider (GMail secure SMTP).

25
répondu AlexV 2010-09-01 13:59:23

essayez d'envoyer un e-mail à travers ce serveur SMTP manuellement/à partir d'un mailer interactif (par exemple Mozilla Thunderbird). Les erreurs, il semble que le serveur n'accepte pas vos informations d'identification. Est-ce que SMTP tourne sur le port, ou est-ce SSL+SMTP? Vous ne semblez pas utiliser secure connection dans le code que vous avez posté, et je ne suis pas sûr que PHPMailer supporte réellement SSL+SMTP.

(premier résultat de googler le nom d'hôte de votre serveur SMTP: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html semble dire" envoi de courrier SMTPs: connexion SSL sécurisée,port: 465". )

il semble que PHPMailer supporte SSL; au moins à partir de ce . Vous devez donc changer ceci:

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

dans ceci:

define('SMTP_SERVER', 'ssl://smtp.ebola.cz');
4
répondu Piskvor 2010-09-01 14:00:06

cela peut sembler comme un shot in the dark mais assurez-vous que PHP a été respecté avec OpenSSL si SMTP nécessite SSL.

pour vérifier l'utilisation de phpinfo()

Espère que cela aide!

2
répondu Mikey1980 2010-09-01 14:19:01

essayez le port 25 au lieu de 456.

j'ai eu la même erreur en utilisant le port 456, et le changer à 25 a fonctionné pour moi.

2
répondu Ludo - Off the record 2013-07-23 02:49:51

Oui, vous avez besoin D'OpenSSL pour fonctionner correctement. Mon site de test de sauvegarde a fonctionné, pas mon serveur en direct. Une différence? Live server n'avait pas OpenSSL dans la configuration PHP.

1
répondu Todd 2010-11-30 19:28:51

j'ai eu un problème similaire pendant environ une heure, jusqu'à ce que je comprenne ce qui a mal tourné. Mon problème était, que j'ai utilisé SSL , au lieu de ssl . Le contrôle est sensible à la casse dans le code. AlexV m'a guidé à la source du problème. Ce truc d'helo / ehlo semble hors de propos.

1
répondu F-3000 2013-07-08 15:19:45

SMTP - > FROM SERVER:

SMTP - > À PARTIR DU SERVEUR:

SMTP -> ERREUR: EHLO pas acceptés à partir du serveur:

c'est typique d'essayer de se connecter à un service SSL avec un client qui n'utilise pas SSL

Erreur

SMTP: Impossible à authentifier.

il n'y a rien d'étonnant à n'avoir pas réussi à lancer une conversation SMTP authentigation n'est pas une option,.

phpmailer ne fait pas de SSL implicite (alias TLS on connect, SMTPS)) A moins de réécrire smtp.classe.php pour inclure le soutien pour it là il n'y a aucun moyen de faire ce que vous demandez.

utilise le port 587 avec SSL explicite (alias TLS, STARTTLS) à la place.

0
répondu user340140 2012-07-09 22:19:32

simple client smtp avec socket php stream avec la commande TLS / ssl smtp STARTTLS: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

fonctionne avec gmail.com avec authentifié:

<?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;
}
0
répondu Max 2017-11-05 11:15:35