ti-enxame.com

Enviando emails via SMTP com o PHPMailer

Estou tentando enviar e-mails SMTP usando o PHPMailer, mas continuo recebendo essa mensagem de erro, alguma idéia de como me livrar dela?
Estou tentando conectar via SSL na porta 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.

Meu código:

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

Definição de Constantes:

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

Alguma ideia?

14
cypher

Tanto quanto eu posso ver tudo está certo com o seu código. Seu erro é:

Erro de SMTP: não foi possível autenticar.

O que significa que as credenciais que você está enviando são rejeitadas pelo servidor SMTP. Certifique-se de que o host, a porta, o nome de usuário e a senha sejam bons.

Se você quiser usar o TLS, tente adicionar:

$mail->SMTPSecure = 'tls';

Se você quiser usar SSL, tente adicionar:

$mail->SMTPSecure = 'ssl';

Tenha em mente que:

  • Alguns servidores SMTP podem proibir conexões de "pessoas de fora".
  • Alguns servidores SMTP não suportam conexões SSL (ou TLS).

Talvez este exemplo pode ajudar (GMail SMTP seguro).

25
AlexV

Tente enviar um e-mail por meio desse servidor SMTP manualmente/de um programa de envio interativo (por exemplo, Mozilla Thunderbird). Dos erros, parece que o servidor não aceitará suas credenciais. O SMTP está sendo executado na porta ou é SSL + SMTP? Você não parece estar usando conexão segura no código que você postou, e eu não tenho certeza se o PHPMailer realmente suporta SSL + SMTP.

(Primeiro resultado de googling hostname do seu servidor SMTP: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html parece dizer "SMTPs envio de e-mail: conexão SSL segura, porta: 465 ".)

Parece que o PHPMailer suporta SSL; pelo menos de this . Então, você precisará mudar isso:

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

nisso:

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

Isto pode parecer um shot no escuro mas certifique-se de que PHP foi cumprido com o OpenSSL se o SMTP requerer SSL.

Para verificar use phpinfo()

Espero que ajude!

2
Mikey1980

tente a porta 25 em vez de 456.

Eu recebi o mesmo erro ao usar a porta 456 e alterá-la para 25 funcionou para mim. 

2
Ludo - Off the record

SMTP -> FROM SERVER:
SMTP -> FROM SERVER:
SMTP -> ERRO: EHLO não aceito do servidor:

isso é típico de tentar se conectar a um serviço SSL com um cliente que não está usando SSL

Erro de SMTP: não foi possível autenticar.

nenhuma surpresa por não ter iniciado uma conversa SMTP a autenticação não é uma opção.

phpmailer não faz SSL implícito (também conhecido como TLS na conexão, SMTPS) Falta de reescrever o smtp.class.php para incluir suporte a ele. Não há como fazer o que você pede.

Use a porta 587 com SSL explícito (também conhecido como TLS, STARTTLS).

1
user340140

Eu tive um problema muito parecido por algo como uma hora, até que descobri o que deu errado. Meu problema era que eu useiSSL, em vez de ssl . A verificação é diferencia maiúsculas de minúsculas no código. AlexV guiou-me para a origem do problema. Esse helo/ehlo-stuff parece irrelevante.

1
F-3000

Sim, você precisa do OpenSSL para funcionar corretamente. Meu site de teste de backup funcionou, meu servidor ao vivo não funcionou. Diferença? O servidor Live não tinha o OpenSSL dentro da configuração PHP.

1
Todd

Cliente smtp simples com soquete de fluxo php com comando tls/ssl smtp STARTTLS: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

trabalha com gmail.com com autenticar:

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