Como enviar email localmente com PHP + Apache + PHPMailer e Gmail no Windows

Muito se busca na internet sobre como enviar emails através de seu servidor web local, e muito se encontra a respeito, talvez nada completo, mas tem muito material a respeito de envio de emails através de sua instalação local do PHP e Apache.

Mais cedo estava lendo um comentário de um usuário do Sistema Básico, o qual me questionava sobre uma forma de enviar emails através de seu servidor local e que chegassem corretamente em contas de email que utilizam servidores do Hotmail, Gmail, Yahoo, etc… isso me levou a montar esse simples tutorial ensinando a enviar emails através de suas aplicações utilizando PHP e Apache instalados localmente em conjunto com a classe PHPMailer e o melhor de tudo, envio autenticado.

A Primeira coisa é efetuar o download do PHPMailer para PHP 5 em formato ZIP

Extraia o conteúdo do arquivo baixado dentro do diretório raíz de seu servidor (DocumentRoot que você definiu no seu Apache), no meu caso é E:\sites.

Crie um arquivo php novo com o seguinte conteúdo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php

/*
Supondo que o arquivo esteja dentro do
diretório raíz e sub-diretório phpmailer/
*/
require "phpmailer/class.phpmailer.php"; 

// conteúdo da mensagem
$mensagem = "Testando o envio de email através de aplicações locais";

// Estrutura HTML da mensagem
$msg = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
$msg .= "<html>";
$msg .= "<head></head>";
$msg .= "<body style=\"background-color:#fff;\" >";
$msg .= "<strong>MENSAGEM:</strong><br /><br />";
$msg .= $mensagem;
$msg .= "</body>";
$msg .= "</html>";

// Abaixo começaremos a utilizar o PHPMailer. 

/*
Aqui criamos uma nova instância da classe como $mail.
Todas as características, funções e métodos da classe
poderão ser acessados através da variável (objeto) $mail.
*/
$mail = new PHPMailer(); // 

// Define o método de envio
$mail->Mailer     = "smtp";

// Define que a mensagem poderá ter formatação HTML
$mail->IsHTML(true); //

// Define que a codificação do conteúdo da mensagem será utf-8
$mail->CharSet    = "utf-8";

// Define que os emails enviadas utilizarão SMTP Seguro tls
$mail->SMTPSecure = "tls";

// Define que o Host que enviará a mensagem é o Gmail
$mail->Host       = "smtp.gmail.com";

//Define a porta utilizada pelo Gmail para o envio autenticado
$mail->Port       = "587";   				

// Deine que a mensagem utiliza método de envio autenticado
$mail->SMTPAuth   = "true";

// Define o usuário do gmail autenticado responsável pelo envio
$mail->Username   = "um-username-seu-no-gmail";

// Define a senha deste usuário citado acima
$mail->Password   = "respectiva-senha-deste-username-acima";

// Defina o email e o nome que aparecerá como remetente no cabeçalho
$mail->From       = "o-username@gmail.com";
$mail->FromName   = "seu-nome-por-exemplo";

// Define o destinatário que receberá a mensagem
$mail->AddAddress("email-do-destinatário@provedor-de-email-do-destinatario");

/*
Define o email que receberá resposta desta
mensagem, quando o destinatário responder
*/
$mail->AddReplyTo("o-username@gmail.com", $mail->FromName);

// Assunto da mensagem
$mail->Subject    = "Assunto-da-mensagem";

// Toda a estrutura HTML e corpo da mensagem
$mail->Body       = $msg;

// Controle de erro ou sucesso no envio
if (!$mail->Send())
{

    echo "Erro de envio: " . $mail->ErrorInfo;

}
else{

    echo "Mensagem enviada com sucesso!";

}

?>

</body>
</html>

Salve este arquivo como email.php no seu diretório raíz, o mesmo que contem o diretório phpmailer/
Abra o arquivo php.ini, que no meu caso está dentro do diretório C:\php

Procure por:

;extension=php_openssl.dll

Retire o ‘;’ do início da linha para descomentar e ativar a extensão php openssl, ficando assim:

extension=php_openssl.dll

Feito isso, agora levando em conta que salvou o arquivo email.php diretamente na raiz de seu servidor, digite na barra de endereço de seu navegador a seguinte URL:

http://localhost/email.php

Após acessar a URL acima, analise o resultado na tela.
Se deu alguma mensagem de erro, revise, se não adiantar a revisão, faça um comentário e tento ajudar.Se deu mensagem de sucesso, parabéns, você conseguiu.
Verifique a caixa de entrada da conta de email a qual você definiu em $mail->AddAddress, e veja se chegou alguma mensagem.

Espero que tenha gostado.

Nota: Para enviar emails localmente utilizando a função mail() do PHP, acredito que somente instalando um servidor SMTP.
Você pode tentar o hMailServer, que é justamente um servidor SMTP para Windows e pode resolver seu problema.
Não testei então fica por seu risco e conta. Você pode ainda dar uma olhada nesse link o qual alguns usuários que já testaram dão seu relato.

Bons estudos!

Tópicos relacionandos

Publicado por

Razor

Conhecedor das artes gráficas, amante de design web, amigo íntimo do desenvolvimento web, com a pretensão de aprender e ajudar à quem busca conhecimento, me faço presente. =)

148 comentários sobre “Como enviar email localmente com PHP + Apache + PHPMailer e Gmail no Windows”

  1. Muito bom cara!!! Ótimo mesmo, quase morri procurando como enviar e-mails através do localhost + phpmailer + google apps. E nunca havia pensado em ter que habilitar a extensão openssl no php.ini. Blog já no meus favoritos. Abração.

      1. Roberto, sabendo que você é um expert em php, teria como criar um sistema para interagir junto com informações de e-mail recebidas?

        Por exemplo: Ao receber um e-mail de uma conta qualquer (pre-configurada), seria possível em cima desse e-mail responder a outro e-mail automaticamente.

        Eu não sei se você está conseguindo me entender mas, aí vai um exemplo mais prático.

        Quero vender um produto na internet e, em cima da aprovação do pagamento do PagSeguro (enviado por e-mail), iria ser liberado um outro e-mail para o cliente que adquiriru o meu produto automaticamente. Isto é, alguem me compra um produto pago com PagSeguro, e se autorizado o pagamento, meu sistema irá disparar uma mensagem para o cliente com informações das formas de envio do produto, o mesmo deverá acontecer se o pagamento não for autorizado, enviando nesse caso uma mensagem de não pagamento.

        Se puder me ajudar mais uma vez, agradeço.

        Obrigado pelo espaço.

          1. Ok!

            Suponhamos que eu venda um produto em meu site com a forma de pagamento PagSeguro. Então, quando um visitante fecha um pedido e faz o pagamento através do PagSeguro, o PagSeguro me envia um e-mail com a confirmação desse cliente e com esse e-mail recebido, eu teria que passar um e-mail para o cliente, informando as formas de envio do produto que ele adquiriu em meu site.

            A idéia seria, ao se confirmar o pagamento pelo PagSeguro, meu servidor iria disparar um e-mail automaticamente para o meu cliente informando os dados necessários e as formas de envio do produto adquirido, sem eu ter de ficar em frente ao computador verificando de hora em hora a autorização de algum pagamento para assim, enviar um e-mail para o cliente com os dados.

            É como se fosse um autoresponder manipulado, sei lá.

            Isso é possível??!

            Espero ter sido claro. Conto cam a sua ajuda!

            Obrigado.

          2. Olá @Everton… entedi agora o que deseja… nucna fiz essa implementação e vai depender do arquivo que recebe o retorno do pagseguro.
            Você pode programar algum arquivo que receba a interação do pagseguro.
            Não sei se o pagseguro tem alguma API que faça isso, vc teria que verificar isso.
            Imagino que deva haver a possibilidade de o pagseguro enviar ter essa interação com teu sistema. tendo essa possibilidade, disparar o email seria o mais fácil do trabalho.
            Procure informações sobre o pagseguro a respeito disso… assim que eu tiver um tempo procurarei saber mais sobre o assunto e posto aqui um tutorial completo.
            Grande abraço
            Bons estudos.

          3. Sim, dá pra fazer mas não é muito útil da forma como você está pensando… O PagSeguro assim como outros sistemas de gateway de pagamento enviam um POST do servidor deles para o seu servidor (você precisa habilitar lá no gateway), este POST possui todas as informações da compra (exceto dados de pagamento).

            Esta informação deve ser gravada em uma base de dados no teu server, dai você roda algum script para verificar se o registro X está marcado como PAGO e se já houve notificação (crie um campo flag e dê o valor 0 para não notificado e 1 para notificado), se não foi notificado envie um email.

            Se você fizer baseado no POST de retorno, existe grande possibilidade de teu server estar ocupado, instável, em manutenção e não confirmar o recebimento do POST.

            Falopa!

  2. Boa tarde, Roberto. + 1 tutorial da hora heim!!!

    Aqui funcionou, mas somente após comentar a linha ($mail->SMTPSecure = "tls";) , antes disso me apareceu o seguinte erro: "Language string failed to load: tls Erro de envio: Language string failed to load: tls" – dei uma lida em outros artigos onde disseram que "TSL" é uma espécie de conexão exclusiva do servidor gmail. Você poderia, por favor, me dizer melhor do que se trata? se é isso mesmo? Meu servidor é a hostnet e como já disse, comentei a linha e funcionou de boa.

    Abraço.

    1. Olá @Jean, o que imagino que aconteceu é o seguinte… este tutorial passa o conhecimento sobre como usar o servidor do GMAIL como SMTP, no caso não estaria usando o de teu provedor de hospedagem não.
      Sendo assim se você tentou enviar utilizando uma conta de email criada por você no próprio servidor de hospedagem, então o SMTP é o de seu provedor de hospedagem e este provavelmente não utiliza SMTP seguro (TLS) e sendo assim não precisa deste protocolo de segurança, o GMAIL que exige isso. Inclusive as portas diferem também. Se está usando o servidor de hospedagem, o padrão na maioria dos servidores é utilizar a porta 25 e não a 587. Por isso indiquei o tutorial, mas adaptando à tua necessidade. Você mencionou 'tsl', mas é TLS o correto, não esqueça disso, e refere-se ao protocolo de segurança para envio, ou seja, um SMTP seguro, que em outros casos poderia ser exigido SSL. Veja como se fosse um site utilizando https ao invés de http.
      No seu caso com o seu servidor de hospedagem, não precisa desta linha mesmo, apenas retire-a e substitua a porta para 25.
      Espero ter ajudado, se sim, espalha a notícia :)
      Bons estudos!

  3. Olá Roberto, quato à idéia de interação do PagSeguro por alguma API (citado acima), descobri que o sistema PagSeguro disponibiliza um ‘TOKEN’ para cada usuário e é isso que verifica junto do site de vendas (vendedor) aidentificação do pagamento e envio do e-mail automático.

    Eu vi há algum tempo na internet um sistema parecido, que faz todo esse trabalho atravéz de um simples botão de pagamento mas, a princípio não sei quais os segredos para isso funcionar…

    Poderia nos dar alguma dica ou ideia?

    Agradecido

    1. Olá @Everton, por enquanto nessa questão eu não poderei ajudar, mas assim que eu me desvencilhar de um projeto grande que me envolvi, buscarei implementar isso como um teste em um de meus sites e quando obtiver resultado semelhante ao que tu procura eu postarei um tutorial e entrarei em contato direto com você.
      Abração

  4. Fiz conforme explicado ai.. mas retorna seguinte erro

    Warning: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122

    Warning: fsockopen() [function.fsockopen]: Failed to enable crypto in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122

    Warning: fsockopen() [function.fsockopen]: unable to connect to tls://smtp.gmail.com:587 (Unknown error) in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122
    Erro de envio: SMTP Error: Could not connect to SMTP host.

  5. Eita, acho que nada funciona comigo ou eu não sei fazer nada, rs.

    ( ! ) Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\phpmailer\class.smtp.php on line 197
    Call Stack
    # Time Memory Function Location
    1 0.0898 373200 {main}( ) ..\email.php:0
    2 0.1200 1054672 PHPMailer->Send( ) ..\email.php:57
    3 0.1214 1056008 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:576
    4 0.1330 1227440 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:705
    5 1.3694 1237384 SMTP->StartTLS( ) ..\class.phpmailer.php:803
    6 2.0975 1237600 stream_socket_enable_crypto ( ) ..\class.smtp.php:197

    Apareceu isto na página. =[

        1. Olá @Airton, seja lá qual for, besta ou não, não tenho como adivinhar.
          De mais detalhes, mas antes de tudo saiba que se não funcionou, alguma coisa vc fez diferente ou as configs do seu server, não estão de acordo.
          Bons estudos

          1. Agradeço a atenção @Roberto inicialmente o erro que estava dando era igual ao do @Nathan então voltei a ler o código e tentar entender aonde estava errando, não vi nada de extraordinário, acessei o Gmail e fui ver as configurações de pop3 e smtp lá diz que a porta utilizada seria a 465 então mudei a porta. Desde então o erro acima não aparece mais e também não é enviado o e-mail. De novo agradeço a atenção.

          2. Parece que o erro esta sendo no SSL porém já o verifiquei varias vezes e ainda assim não funcionou, irei continuar tentando. Abraços

          3. @Ayrton, se vc colocar a mensagem de erro ajuda.
            Se não tiver mensagem de erro dificulta.
            Verificou em relação ao teu PHP se tem a biblioteca openSSL definida corretamente?
            Alias… se a distribuição do PHP que vc instalou veio com a biblioteca junto.

        2. Ola eu estou a ter exactamente o mesmo problema.
          Eu comentei a linha de cima:
          extension=php_openssl.dll no ficheiro .ini
          e da o mesmo problema, suponho que seja o problema de nao encontrar o ficheiro
          na directoria correcta

  6. Bom dia, seu email funciona perfeitamente a parte de envio.

    O Unico cproblema que tive é reconhecer o html na caxa de entrada do Gmail, ele naum atribui as configuracoes HTML no email recebido pelo gmail e hotmail.

    Sabe me dizer se exite outra forma de fazer o Gmail ler o HTML que foi enviado pelo arquivo

    1. Olha, isso seria algo que não poderei ajudar por enquanto, pois já passei pela mesma dificuldade e aceitei as restrições.
      Coisas que você pode usar é o CSS inline e html puro e tosco mesmo, pois qualquer gabaritada no HTML os sevidores de email já dão um jeito de desativar.
      Boas pesquisas.

  7. Olá Roberto

    Não consegui, aparecem os erros SMTP Error: Could not connect to SMTP host. Erro de envio: SMTP Error: Could not connect to SMTP host.

    Utilizo xampp, tem alguma diferença?

    Os arquivos que eu baixei do phpmailer ficam em uma subpasta da ferramenta php que estou testando.

    No aguardo

    1. Olá Jucy, você tentou utilizando uma conta de email do Gmail?
      A biblioteca openssl está ativada no seu PHP?
      Enfim.. eu precisaria de mais detalhes para poder te ajudar… pois o problema não está no sistema e sim da forma que você fez e nas condições que fez.
      Somente com mais detalhes para poder ajduar.
      Aguardo

  8. Estou com problemas com o comando $mail->AddReplyTo, não dá erro e a mensagem é enviada, no cabeçalho do e-mail vem ‘responder para…e-mail correto’, porém quando clico em responder, é o e-mail do $mail->AddAddress que aparece no ‘para’. Uso o google apps, será que pode me ajudar?

    Obrigada!

  9. Olá Roberto,

    Muito procurei por um scripts igual ao seu, muito explicativo e simples ao mesmo tempo, os comentarios são perfeitos, olhei em outros foruns e todas as explicações deixam quem é iniciante meio confuso!

    Muito obrigado.

    Att,

    Rogerio Leal

  10. Fiz conforme o seu tutorial e deu esse erro:
    Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\Users\sr\Documents\Delphi for PHP Projects\srintranet\informatica\class.smtp.php on line 194

    Sendo que as bibliotecas já estão habilitadas no php.ini e o arquivo php_openssl.dll está nesse endereço C:\Program Files\CodeGear\Delphi for PHP\2.0\php\ext

    se você puder me ajudar eu agradeceria muito.

    1. Se vc seguiu todo o tutorial, não sei dizer ao certo oque pode estar ocorrendo.
      Já pensou que a distribuição do PHP que vc instalou não seja a ideal para tanto?
      Mesmo assim acho remoto a hipótese.
      Difícil entender o porque o erro se diz ter feito corretamente habilitação do openssl.
      Boa sorte

  11. Warning: fputs() expects parameter 1 to be resource, integer given in F:\webserver\apache2.2\htdocs\PHPMailer\class.smtp.php on line 212 SMTP Error: Could not authenticate. Erro de envio: SMTP Error: Could not authenticate.

    Boa tarde, esse erro aconteceu depois que coloquei o email do yahoo

  12. Olá galera, já segui vários tutoriais, fiz de um tudo para rodar meu código, mas não obtive sucesso.

    Olha, preciso enviar email autenticado pelo protocolo TLS e não SSL, com a porta 587, já ative o OPENSSL, mas mesmo assim não funciona. Ahhhh.. o servidor é particular e já verifiquei as configurações no servidor também…

    Dá o seguinte erro… Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto

    Como já disse, não consegui em nenhum tutorial, caso consiga aqui, divulgarei esse tutorial, pois vários amigos estão com o mesmo problema….

    Segue meu código…

    IsSMTP();

    //Informa que a conexão com o SMTP será autenticado
    $mail->SMTPAuth = true;

    //Configura a segurança para SSL
    $mail->SMTPSecure = “tls”;

    //Informa a porta de conexão
    $mail->Port = 587;

    //Informa o servidor de saída
    $mail->Host = “servidor”;

    //Usuário para autênticação do SMTP
    $mail->Username = “remetente”;

    //Senha para autênticação do SMTP
    $mail->Password = “senha”;

    //Titulo do e-mail que será enviado
    $mail->Subject = “Formulário de contato”;

    //Preenchimento do campo FROM do e-mail
    $mail->From = $mail->Username;
    $mail->FromName = “Remetente”;

    //E-mail para a qual o e-mail será enviado
    $mail->AddAddress(“email do destinatário”);

    //Conteúdo do e-mail
    $mail->Body = “Novo contato feito através do site.”;
    $mail->AltBody = $mail->Body;

    //Dispara o e-mail
    $enviado = $mail->Send();

    //Imprime sucesso.
    if($enviado)
    echo “E-mail enviado com sucesso”;
    else
    echo “Falha no Envio”;
    ?>

    Abraço

  13. deu um errinho , mas eu comentei o codigo $mail->SMTPSecure = “tls”; e deu certo utilizando o smtp do yahoo brasileiro, e ainda, de quebra, to rodando com o IIS 6.0 do windows vista
    show de bola !!!

    1. @Edmilson, esse erro ocorreu justamente porque tentou com yahoo, pois SMTPSecure utilizando tls é justamente uma exigência do google/gmail.
      O tutorial foi feito para o Gmail, porque desta forma vc pode enviar email autenticado… com yahoo nunca testei massivamente para ter certeza que os emails não cairão em spam
      abraço

  14. SMTP Error: Could not connect to SMTP host. Erro de envio: SMTP Error: Could not connect to SMTP host.
    trokei de tsl para ssl e e da esse erro. e deixando tsl da erro:
    Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\brincadera\phpmailer\class.smtp.php on line 197

    1. vc está usando gmail??
      Se não estiver usando gmail não precisa o protocolo.
      Se tiver usando Gmail, o protocolo é tls, e a porta, a que informei no tutorial e nesse caso o problema está provavelmente no openssl que não deve estar instalado com a distribuição do PHP que vc usa.
      Qualquer coisa fala aí
      Bons estudos.

  15. Depois de ter procurado, experimentado e corrigido mil vezes, achei o teu tuto, e funcionou beleza !
    Inclusive funciona tambem numa conta do hotmail (mudando o host, o username e o password, é claro).
    Agora é só adaptar ao que preciso.
    Valeu mesmo Roberto !! :))

  16. Após ter testado, percebi que ” $mail->AddReplyTo($mail->From,$mail->FromName); ” não é tomado em considereção no site de GMAIL.
    Para ser mais preciso, parece que si a conta usada para mandar o mail é a mesma que recebe o mail, AddReplyTo() não é considerado.
    Quando se clica no botão ”responder”, coloca automaticamente “resposta para : Username” (a conta usada para mandar o mail)
    Si eu uso uma outra conta, aí sim a resposta vai ser para AddReplyTo().
    Os dados de meu formulário são enviados pela conta que eu uso para o site, e são recebidos nesta mesma conta. Para responder, vou ter que preencher o campo ‘para’ com o endereço de quem me mandou o mail.
    Será que da para “enganar” gmail para que ele toma em consideração AddReplyTo() neste caso ?

    1. @Stephan, após sua dúvida fiz o seguinte teste aqui, usando o server do gmail:


      $mail->FromName = $_POST['nome'];
      $mail->AddAddress("email@gmail.com");
      $mail->AddReplyTo($_POST['email'], $mail->FromName);
      $mail->Username = "email@gmail.com";
      $mail->Password = "senha";

      Desta forma testei enviando o form com um email diferente de email@gmail.com e usando o mesmo email que utilizei no AddAdress
      Sempre que usei o reply lá no painel do gmail ele abria uma caixa de reposta com o ‘para’ apontando para o que tem em $_POST[‘email’]
      Sendo assim não sei mais como ajudar, pois está tudo ocorrendo da melhor forma que tem que ser.
      Teste novamente, com atenção no que falei.
      Bons estudos

      1. Talvez o gmail interpreta diferente para mim ;)
        Na verdade minha conta é uma conta do gmail que usa um nome de dominio proprio :
        minhaconta@meudominio.com
        No painel do gmail, a mensagem é identificada desde a sua chegada como vindo de “mim”.
        Vou tentar achar a solução, mas não esquenta que, em ultimo caso posso abrir uma outra conta só para isso.
        Valeu !

        1. 11/01/2013
          Bom dia, Stephan.

          * Estou com o mesmo problema que o seu e estu tendo dificuldades em achar solução.

          Poderia me orientar? (o correto é o gmail lêr o E-MAIL DO DO REMETENTE – CADASTRADO PELO USUÁRIO NO CAMPO DO FORMULÁRIO)

          Aguardo retorno.
          Obrigado.

  17. roberto pela mor de deus cara faz quase 1 mes q to tentando fazer isso duncionar, cara tem como vc upar seu php.ini pra mim em algum link pra mim copiar deixe ele pre definido com o tal do openssl?

  18. roberto deu certo cara meu deus pulei de alegria usahshau eu baixei o wimp server e depois baixei um plugin openssl do site deles dae ativei o mesmo,agora deu certo,mais uma duvida ele nao manda pra hotmail?

    1. Se baixasse as distribuições que eu indiquei, teria conseguido de primeira… pacotes como os que usa, geralmente tem algumas atribuições extras que deve fazer, exatamente como o fez com esse plugin.

      Quanto ao Hotmail… sim… acredito que sim, mas veja que o hotmail tem suas políticas… não garanto nada, mas bastará retirar estas referências:

      -> RETIRE
      // Define que os emails enviadas utilizarão SMTP Seguro tls
      $mail->SMTPSecure = "tls";

      -> SUBSTITUA PELO HOTMAIL (procure saber qual é)
      // Define que o Host que enviará a mensagem é o Gmail
      $mail->Host = "smtp.gmail.com";

      -> RETIRE
      //Define a porta utilizada pelo Gmail para o envio autenticado
      $mail->Port = "587";

      Com o yahoo talvez tenha mais sucesso, mas tente aí.
      Bons estudos

      1. Para mim funciona perfeito com o hotmail :
        $mail->Host = “smtp.live.com”;
        $mail->Username = “eu@hotmail.com”;
        $mail->Password = “minhasenhahotmail”;

  19. Olá amigo.
    No meu caso, parece que o erro é no phpmailer.
    Já verifiquei o código e a sintaxe dele parece-me correta.
    Se puder ajudar, agradeço muito.
    Segue o erro abaixo:

    ( ! ) Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\ABD\phpmailer\class.smtp.php on line 197
    Call Stack
    # Time Memory Function Location
    1 0.0049 373712 {main}( ) ..\email.php:0
    2 0.0379 1055208 PHPMailer->Send( ) ..\email.php:88
    3 0.0400 1056560 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:576
    4 0.0539 1228032 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:705
    5 2.0874 1237856 SMTP->StartTLS( ) ..\class.phpmailer.php:803
    6 2.6745 1238072 stream_socket_enable_crypto ( ) ..\class.smtp.php:197

    1. Olá, pelo que percebi no caminho do seu dir, está utilizando algum pacote WAMP
      Verifique no local que efetuou download desse seu pacote WAMP se tem algum plugin, algum download adicional em relação à SSL, conforme mencionei a necessidade no próprio tutorial.
      Bons estudos

  20. Parabéns pelo blog. Estou no começo da linguagem, e preciso fazer o seguinte sistema: assim que um usuário se cadastra no sistema, eu tenho que enviar para ele a sua senha, e com ela, ele passa a logar no sistema. Meu professor do curso técnico indicou que usássemos a função MAIL, porém, depois de varias tentativas e pesquisas, percebi que ela não funciona no localhost e com o smtp padrão, que vem no phpini.

    Decidi então usar a classe phpmailer, mas como nunca trabalhei com classes no curso, estou tendo algumas dificuldades para adaptar o código ao meu sistema.

    Com este código que você postou no blog, quais seriam as alterações que eu preciso fazer?

    Desde já, parabéns pelo blog. Site nos favoritos

    1. Olá @Yan, primeiramente obrigado.
      Para adaptar o phpMailer em qualquer sistema que utilize o envio de mensagens via SMTP basta seguir este tutorial.
      No seu caso, substitua o que diz respeito a utiliação mail() pelos parâmentros necessários para utilização do phpMailer citados neste tutorial.

      Se precisar de um suporte mais direcionando, efetue uma doação para ajudar o Sistema Básico e entre em contato logo após que eu abro um canal de suporte direto com vc.
      Bons estudos!

    1. “ISSO” pode enviar como cópia e cópia oculta para outros destinatários a mesma mensagem.
      Vc pode colocar o sistema para rodar em um loop tbm.
      Seja qual for a forma que use deves respeitar as normas de teu server quanto ao envio de newsletter para grandes listas de email.
      Procure sobre PHPMAILER no google e encontrará outras diretrizes que podem ajudar na configuração da forma que deseja.
      Bons estudos

    1. Olá @Liliana, na verdade e4ste site é uma iniciativa individual minha, não há uma equipe atrás das cortinas, apenas eu, Roberto.
      Quanto à sua dúvida, na verdade eu que fiquei na dúvida do proque a sua dificuldade.
      Que pasta é essa que está perguntando??
      Este tutorial não é para vc receer emails no seu compuitador e sim enviar a partir dele usando uma conta do Gmail de forma autenticada.
      Qualquer coisa fala aí.
      Abraços

    1. Olá @Marcio, o gmail tem essa implicância com o html rs*
      Mas se vc escrever html bruto e 4.1 pode dar certo.
      Abuse de tabelas e imagens.
      Não utilize CSS rel, use inline, ou seja, diretamente na tag que deseja aplicar o css.
      Tente fazer bem tosco mesmo.
      Abraço

  21. mano olha so
    // Assunto da mensagem
    $mail->Subject = “Assunto-da-mensagem”;

    // Toda a estrutura HTML e corpo da mensagem
    $mail->Body = $msg;

    // Controle de erro ou sucesso no envio
    if (!$mail->Send())
    {

    echo “Erro de envio: ” . $mail->ErrorInfo;

    }
    else{

    echo “Mensagem enviada com sucesso!”;
    a onde eu coloco a minha engenharia
    tou testando com smto da terra
    adciona eu ai corroatraz@hotmail.com

    1. @Marcio, vamos por partes…
      O título do tutorial já diz que o esquema é enviar email AUTENTICADO com GMAIL e não Terra.
      Se quiser tentar com outros servidores terá que fazer alterações na estrutura do script.

      Para TENTAR (não funciona em todos e nem sei quais funcionam) usar servidor diferente deves alterar essas linhas:

      RETIRAR ESSA
      // Define que os emails enviadas utilizarão SMTP Seguro tls
      $mail->SMTPSecure = "tls";

      ALTERAR ESSA PARA A DO SERVER QUE FOR USAR
      // Define que o Host que enviará a mensagem é o Gmail
      $mail->Host = "smtp.gmail.com";

      RETIRAR ESSA
      //Define a porta utilizada pelo Gmail para o envio autenticado
      $mail->Port = "587";

      RETIRAR ESSA
      // Deine que a mensagem utiliza método de envio autenticado
      $mail->SMTPAuth = "true";

      Caso o server que utilizar tenha regras para utenticação, então as linhas que eu disse pra retirar deverá alterar para as regras do teu server.

      Quanto ao HTML bastas ter atenção ao tutorial:

      Essa linha te diz oque?

      // Toda a estrutura HTML e corpo da mensagem
      $mail->Body = $msg;

      Todo conteúdo da variável $msg está atribuído nessa linha @Marcio

      Pegou?? se não pegou é porque não leu o tutorial com atenção
      Veja lá em cima no início do tutorial o que está atribuído à variável $msg

      // Estrutura HTML da mensagem
      $msg = "< !DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
      $msg .= "";
      $msg .= "";
      $msg .= "";
      $msg .= "MENSAGEM:

      ";
      $msg .= $mensagem;
      $msg .= "";
      $msg .= "";

      ;)

    1. Como não conseguiu? Percebeu onde vc adiciona o HTML na minha resposta anterior???
      Enfim… esse tutorial é simples para envio de um email, afinal o Gmail ou qualquer outro server público tem políticas rígidas quanto ao envio de SPAM, não tem como vc enviar pra lista.
      Tem, mas logo vc estará numa blacklist.

      Para envio em massa, envolve programação sistemática para envio limitado por horas e dias e quantidade e etc, ou Contratar um servidor remoto que seja Dedicado para usar como servidor de envio de email e ainda assim terá que respeitar a política de privacidade e uso do servidor contratado.
      Bons estudos

  22. Roberto,
    A minha dúvida surgiu dessa frase: “Extraia o conteúdo do arquivo baixado dentro do diretório raíz de seu servidor (DocumentRoot que você definiu no seu Apache), no meu caso é E:\sites.”

    Não sei ver qual a raiz do meu servidor. :$
    Fiz o download mas não sei para onde extrair.
    helppp
    Beijo

  23. amigo olá tudo bem,é….seguinte:
    eu utilizei teu código porém deu o seguinte erro:
    Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\xampp\htdocs\cobrancaPop\phpmailer\class.smtp.php on line 197
    o que poderá ser? aguardo noticias, vlw!!!

    1. Olá @Alcides, da uma conferida com mais atenção ao tutorial.
      Releia todos os coments. (Outras pessoas tbm passam por esse problema que tem solução.)
      Não deve ter o PHP com openssl integrado.
      Mas faça o que eu disse nas duas primeiras linhas.
      Teste e reteste.
      Bons estudos.

  24. Olá!!

    Seria possível enviar e-mails em massa utilizando esse método??

    Será que os servidores googledianos permitiriam esse tipo ação??

    Qual seria o total permitido para envio??

    Será que eu poderia utilizar esse método em meu site, para então efetuar envios de formulários de contato e cadastro (média de 10.000 visitantes/mês).

    Peço desculpas por tantas perguntas e dúvidas!

    1. Olá Anônimo, sim é possível enviar email em amssa, mas não exatamente com esse script do tutorial. Precisaria de algumas implementações para tornar o envio legal e sem risco de ser considerado um script de spammer.

      O Google tem sua política de privacidade e termos de utilização, sendo assim terá que consulta-los para saber.
      Pelo que eu sei tem limites sim.

      O total permitido é como eu disse, terá que consultar os documentos do Google para saber ao certo, mas se não me engano é 500 envios por dia e não sei ao certo quantos por hora.

      Esse método do tutorial é tranquilo para usar em formulários de contato e cadastro, isso se na soma total, menos que 500 pessoas fizerem contato e/ou cadastro por dia no seu site.
      (verifique a quantidade por hora também)

      Bons estudos

    1. Olá @JEferson, este tutorial tem como único objetivo ajudar na instalação de cada distribuição separadamente e exclusivamente para o Windows 7.
      Se vc tem o AppServer instalado, você não precisa deste tutorial, pois já teria as ferramentas instaladas.
      Porém saliento que um pacote fechado como AppServer ou algum pacote XAMP ou WAMP fechado, que encontramos pela internet, nada tem haver com esse tutorial.
      Se teu desejo é seguir este tutorial, seria interessante desinstalar qualquer pacote desse segmento por conta e risco.
      Bons estudos.

    1. Que erro ocorre? alguma mensagem?
      Se tentou utilizar esse sistema com alguma conta do gmail, não tem porque dar errado
      Se tentou com algum email seu, relacionado ao seu domínio, ou algum outro serviço de email público, você precisa fazer algumas alterações retirando algumas linhas do cod do phpmailer.
      Da uma olhada em alguns coments acima, aqui neste tutorial e vai descobrir quais modificações.
      Se for algo fora disso que falei… fica difícil saber o que pode ser.

  25. Roberto por favor me ajuda.
    O meu deu o seguinte erro:

    Warning: require(phpmailer/class.phpmailer.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\email2\email.php on line 17

    Fatal error: require() [function.require]: Failed opening required ‘phpmailer/class.phpmailer.php’ (include_path=’.;C:\php5\pear’) in C:\wamp\www\email2\email.php on line 17

    no aguardo.

    1. @Thiago, o erro está claro na sua prórpia mensagem de erro.
      Você precisa incluir o arquivo que está no caminho phpmailer/class.phpmailer.php no arquivo email.php.
      Se você incluiu ele no seu arquivo email.php atraves de require, conforme tutorial o erro está na definição do caminho, ou seja, um erro de hierarquia dos diretórios.
      Se o phpmailer/class.phpmailer.php está dentro da pasta email2/, no memso local do arquivo email.php, não era pra dar errado.
      Se está fora da pasta email2/ não precisa alterar, porém precisa definir o caminho exato no arquivo email.php.

      Exemplo: arquivo email.php está no dir www/email2/,
      mas o class.phpmailer.php está no seu diretório raíz … www/ ou seja, assim: www/phpmailer/

      Então o caminho do requeire no arquivo email.php deve ser:
      require "../phpmailer/class.phpmailer.php";

      É só um exemplo… deves fazer conforme a sua estrutura.
      Se sua estrutura for como no exemplo, então vai facilitar a correção.

        1. Pelo erro o script está procurando a classe na pasta phpmailer/ e não na pasta email2/
          Se estiver colcaondo a classe direto na pasta email2/ deves arrumar o caminho do requeire que está indicando que está em phpmailer/class.phpmailer.com

  26. Gostaria de te parabenizar por este brilhante tópico. Estava a semanas apanhando para acertar este procedimento. Parabéns e obrigado por dividir este conhecimento com outras pessoas

  27. Roberto , tentei fazer e aparece o erro abaixo:

    Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\xampp\htdocs\www.multitec.com.br\phpmailer\class.smtp.php on line 195

  28. Oi Roberto,
    Eu gostaria “apenas” de parabenizá-lo.
    Eu estou longe de ser um programador PHP pois somente a 1 mês entrei neste universo. Eu tive curiosidade em saber como se faz este envio de e-mail, pois alguém me questionou se o PHP faria isto…
    E, assim como tantas outras pessoas que vi por aqui, eu acabei me deparando com o seu tópico.
    Graças a Deus por pessoas iguais a você.

  29. Olá Roberto fiz os testes conforme explicado e deu certo, só tem um detalhe… Eu também tenho instalado como Localhost o WordPress e fiz um teste nele como se eu tivesse esquecido minha senha para que a nova senha gerada, ele enviasse para meu gmail e não deu certo. Aparece uma mensagem informando que minha função mail() foi desativada pelo servidor. Será que devo configurar o [mail_function] do php.ini ? Aguardo sua dica.

    1. Olá @George, não sei se entendi bem…
      Para você aplicar esse tutorial ao WordPress, terá que primeiramente saber como o WordPress trabalha com os envios de email… e pelo que vi ele utiliza a função mail() do PHP.
      Para passar à classe PHPmailer, terá que descobrir como e onde defini-la, substituindo pelo que é usado em relação à função mail()
      Confesso que não sou expert em WordPress e por isso não posso indicar uma forma mais direta.
      Este tutorial irá funcionar perfeitamente para aplicações desenvolvidas por você, porém scripts de terceiros terá que buscar suporte nos fóruns de comunidades ligadas à eles, no caso, WordPress… assim acredito qeu encontrará ajuda sobre como adaptar o sistema WordPress para utilizar a classe phpmailer.
      Qualquer coisa volte a comentar…
      Bons estudos.

  30. Boa Tarde @Roberto Lunelli,
    Eu acompanho seu trabalho já faz um tempinho e sempre me ajudou muito, graças aos seus tutoriais consegui implantar um painel ADM, para o banco de dados da empresa, ficou muito fácil com administratar usando modo gráfico ;-] …., Bem na empresa em que trabalho eu implantei um sistema de boleto, já esta tudo funcionando certinho, porém minha duvida é a seguinte se eu usar PHPMailer, para avisar me quando tal cliente acessou o tal boleto, sendo enviado uma copia pra mim e o cliente e tendo assinatura nos email?
    Outra coisa tbm queria que nesse email fosse enviado uma copia do boleto em anexo PDF, tentei por varias vezes usar bibliotecas de PDF e não conseguir adaptar junto ao meu código, desculpe mais nem cheguei a procurar algo parecido aki no site, teria como me dar umas dicas..

    Att Abraços

    1. Olá @Fabio, acredito que não terá problemas com o envio usando PHPMailer, aliás acho o mais adequado para aplicações mais sérias… mail() não é confiável… nem um pouco… não devido à função em si, mas à todas restrições para evitar spam utilizadas nos servidores remotos hoje em dia.

      Quanto ao envio do anexo, não tem problemas, acho até mais fácil o envio… porém acredito que teu problçema não seja o envio… estou correto?
      Pelo teu coment acho que o teu problema é em criar um pdf… seria isso?? Se for isso não vejo porque, pois se vc já gera o pdf com o sistema de boletos que mencionou, basta usar o mesmo já gerado e anexar novamente na cópia da mensagem.

      Enfim… está um pouco confuso pra mim a sua dúvida, ams saiba de antemão que a classe PHPmailer permite o envio de copia oculta sendo assim a mesam mensagem que vai pro destinatário pode ir pra uma conta de email que vc defina como copia oculta…

      Da uma pesquisada sobre a estrutura do cod do PHPmailer pra descobrir todas as opções que são viáveis junto a classe.
      Algumas opções vc já encontra no tutorial este o qual vc comenta agora, outras vc pode encontrar no próprio site da classe disponibilizado no tutorial… qualquer outra dúvida entre em contato novamente

      Abraço

  31. Boa Noite, ótima postagem … mas estou meio perdido, não encontrei esta linha no meu php.ini

    ;extension=php_openssl.dll

    estou utilizando o xampp … tem algo a ver ?

    Abraços

    1. Para que esta extensão seja encontrada no php.ini ou até mesmo que ela funcione, a distribuição do php que deve utilizar é a que habilita esta extensão para ser utilizada.
      Talvez a versão do php que vem no seu pacote não tem essas possibilidades.
      Sugiro seguir meus tutoriais: Instalar APACHE, PHP e MYSQL, instalando o php, mysql e apache indivdualemnte terá um aproveito maior do aprendizado, sem dizer que a tua estrutura para desenvolvimento com PHP será mais robusta, facilitandfo inclusive em momentos de atualizações, pois poderá fazer individualmente.
      Bons estudos.

  32. Parabéns pelo blog, estou apenas com uma duvida,
    me ocorre este erro
    SMTP Error: Could not authenticate. Erro de envio: SMTP Error: Could not authenticate.

    Algum problema de autenticação, mas estou com o emailok, ja mudei a prota SMPT para 25 e continua a mesma…
    Oque sera q poderia ser ?
    Obrigado pela atenção :)

    1. Olá @Leonardo… vc deu atenção às necessidades e requisitos que informei no tutorial?
      Utilizou o protocolo corretamente?
      Chamou o include no caminho corretamente…

      Fica dificil saber como vc fez… apenas citei algumas hipóteses para vc testar
      Lembrando que esse tutorial é pra usar com Gmail, mas pode ser adaptado aplicando algumas modificaç~çoes que inclusive informo em alguns coments acima.
      Bons estudos!

  33. Meu amigo,

    Depois de procurar em milhões de fóruns e tentar pelas milhões de alternativas disponíveis, finalmente encontrei uma solução perfeitamente coerente, direta e correta (como você disse, talvez as soluções por ae estejam incompletas). Quase cair da minha cadeira quando vi a minha mensagem na minha caixa de e-mail. Sou um novato em PHP e em programação Web e estava muito frustado por não consigo fazer isso (embora, em vários lugares estam dizendo que quando um site é hospedado, esse problema é automaticamente resolvido uma vez que o próprio provedor tem um servidor de envio de msg, ou coisa parecida). Olha, parabéns pelo tutorial.

    1. Obrigado pelas palvras @Janson, é isso (e as doações quando ocorrem) que me mantém alimentando esse site.
      Quanto a sites hospedados, a lógica é a mesma, com algumas modificaç~eos em relação à utilização do protocolo de segurança e a porta, mas pode perfeitamente urilizar o phpmailer com uma conta de email sua do seu site e de forma autenticada tbm.
      Para que a mesma não caia como SPAM, além de ser enviada de forma autenticada,o servidor de envio tem que ter algumas configurações pré-estabelecidas.
      Fico feliz em ter ajudado.
      Bons estudos!

  34. Cara Parabens pelo post!!!sou novo em php e fikei loko procurando posts relacionados testei todos e nenhum funcionou,o seu assim que terminei os passos ja recebi o email!!agora vou adequar a minha página!
    Parabens!!!

  35. Ola Roberto,queria agradecer a voce pois parece que esse é o tutorial que está me deixando mais perto de conseguir enviar um email..sou iniciante em php e sei que nao poderia estar mais mastigado do que o seu tutorial,mas estou tendo problemas na autenticação do usuario e senha,coloquei um debug no codigo e aparece isso
    SMTP -> ERROR: Password not accepted from server: 535-5.7.1 Username and Password not accepted. Learn more at 535 5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257 he6sm23702284qab.1 – gsmtp

    fiz um email do gmail,estou usando o phpmailer na pasta correta e fiz tudo como voce disse,pode me ajudar?grato mais uma vez

  36. esqueça acabei de conseguir,era só definir no código seu nome de usuario(email) e a senha que voce usa no gmail.
    o erro era na verdade do servidor nao conseguir autenticar
    SMTP Error: Could not autenticate

    1. Você pode usar html simples para criar o formulário com campos simples como, Nome, Email, e o botão Enviar e já seria um bom teste.
      Deverá resgatar esses campos no arquivo email.php que você citou e usar os script para enviar os dados.
      Para fazer um formulário mais completo não tem segredo, basta usar a mesma lógica, apenas adicionando mais campos e resgatando esses campos também.
      Bons estudos

  37. O meu continua dando erro de smtp…

    SMTP Error: Could not connect to SMTP host. Não foi possível enviar o e-mail.

    Informações do erro:
    SMTP Error: Could not connect to SMTP host.

  38. Ola amigo,primeiro parabens pelo site!!!! Sou leiga em tudo o que vcs tratam aqui e mesmo assim estou conseguindo obter sucesso gracas a esses tutoriais tao bem feitos!!! Consegui instalar os tres tutoriais aparentemente sem problemas (mas apanhei um pouco!!!) Este deu um erro inicial que resolvi, mas agora da um erro na data que ja tentei alterar no arquivo php e nao esta resolvendo, sera que podem me ajudar? Desde ‘já obrigada

    Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘America/Sao_Paulo’ for ‘-3.0/no DST’ instead in C:\web\phpmailer\class.phpmailer.php on line 1925

    Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘America/Sao_Paulo’ for ‘-3.0/no DST’ instead in C:\web\phpmailer\class.phpmailer.php on line 1929

    Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\web\phpmailer\class.smtp.php on line 197

    1. Olá Priscila, no seu caso são dois erros distintos… primeiramente deverá definir o time-zone no seu PHP, defina para America/Sao_Paulo.
      Jogue no google como configurar date.timezone no PHP.

      Depois no segundo erro sobre não suportar SSL/crypto é poque seu PHP não tem biblioteca OpenSSL integrada na instalação.
      Releia o tutorial e lá eu indico sobre essa questão. É um erro comum no acompanhamento deste tutorial, deixarem passar batido esta relação.
      Bons estudos

  39. Depois de fazer tudo com indacado, deu me este erro:
    Warning: stream_socket_enable_crypto(): this stream does not support SSL/crypto in C:\xampp\htdocs\GoldenService\phpmailer\class.smtp.php on line 197
    Language string failed to load: tls Erro de envio: Language string failed to load: tls
    SMTP server error:

    Podem ajudar s.f.f

    1. João, no próprio tutorial eu comento sobre a possibilidade deste erro ocorrer.
      Verifique se seguiu o que falei no final do tutorial sobre openssl e se fez tudo correto então, provavelmente vc não tem o php instalado com openssl integrado.

  40. Nossa, Td d bom esse tuto. Aqui funcionou perfeitamente, sem erro. Já até adaptei ao meu projeto de captura de email para pratica de e-mail marketing. Num tem nem que comentar nada sobre isso pq ficou filé mesmo. Ai, quem nao conseguir é pq é muito ruim em php mesmo. Valeu ai galera. Fiquei fã deste Blog, vou cont.. participando dele. Rrsrsrs. Se precisa d minha ajuda só falar.

  41. Cara esse teu tutorial foi o mais detalhado q vi ate hj!! Ja quebrei tanto a cabeca tentando enviar email localhost mas so com teu site q funcionou!!
    brigadao

  42. Olá Roberto tudo bem? Queria saber se você consegue me ajudar em uma coisa. Estou utilizando o PHPMAILER sem problemas, porém os emails que são enviados através de SMTP autenticado não estão sendo salvos na pasta ITENS ENVIADOS. Sabe dizer se seria alguma configuração extra no PHPMAILER que deve ser feita?

    Abs,

  43. Boa noite, Roberto
    Tentei fazer aqui e não consegui, esta aparecendo esse erro:

    Aviso : stream_socket_enable_crypto () [ streams.crypto ]: este fluxo não suporta SSL / criptografia em C: \ wamp \ www \ envio \ phpmailer \ class.smtp.php na linha 197
    seqüência de Língua falhou ao carregar: tls Erro de envio: corda Idioma não conseguiu carga: tls
    Erro no servidor SMTP:

    lendo os comentários anteriores, instalei a nova versão do wampserver2.4, e fiz a alteração extension=php_openssl.dll. apareceu esse erro:

    ( ! ) Warning: stream_socket_enable_crypto(): this stream does not support SSL/crypto in C:\wamp\www\envio\phpmailer\class.smtp.php on line 197
    Call Stack
    # Time Memory Function Location
    1 0.0180 145896 {main}( ) ..\email.php:0
    2 0.0430 479048 PHPMailer->Send( ) ..\email.php:88
    3 0.0440 482416 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:576
    4 0.0470 566136 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:705
    5 0.8580 576424 SMTP->StartTLS( ) ..\class.phpmailer.php:803
    6 1.0291 576768 stream_socket_enable_crypto ( ) ..\class.smtp.php:197
    Language string failed to load: tls Erro de envio: Language string failed to load: tls

    oq devo fazer????

  44. Muito obrigado esse tutorial me ajudou bastante, já estava a algum tempo atrás de algo assim e agora consegui achar.
    Mais uma vez muito obrigado!!!

  45. Warning: require(phpmailer/class.phpmailer.php): failed to open stream: No such file or directory in /storage/sdcard0/www/email.php on line 17

    Fatal error: require(): Failed opening required ‘phpmailer/class.phpmailer.php’ (include_path=’.:’) in /storage/sdcard0/www/email.php on line 17

  46. Oi, valeu pelo tutorial, único que achei(e olha que procurei) que funciona perfeitamente, não deu de primeira, mas o meu problema só estava no pacote do phpMailer, baixei o mais recente e funcionou perfeitamente, valeu, me ajudou muito!

  47. Roberto, parabéns pelo seu excelente tutorial. O melhor que vi entre todos.

    Perdoe-me incomoda-lo após estes meses de estabilidade noscomentários, mas eu estou a mais de 40 dias tentando usar o PHPMailer mas estava difícil, pois seguia inúmeras sugestões e nada resolvia, mas após ver hoje o seu tutorial fiz exatamente o que explicaste ali e após corrigir os erros que cometi,
    liberar a dll no php.ini etc. finalmente cheguei apenas a uma linha de erro, e com debug umas poucas mais que detalham melhor o erro.

    Li todos os comentários acima, revisei tudo mas esbarrei em um erro que não estou conseguindo resolver.

    Incluí Debug=2 no código após o $mail->Mailer – “smtp” conforme a seguir:

    $mail->Mailer = “smtp”;
    $mail->SMTPDebug = 2;

    Apesar de tudo, ainda estou com erro onde o servidor “gmail “parece não reconhecer a password. Já copiei do próprio servidor e colei no código para eliminar a possibilidade de algum caracter estranho.

    Meu ambiente ainda é o windows Xp com service pack3.
    Uso o Easyphp-DevServer-14.1Vc9 na minha máquina onde realizo os testes e nele vem integrado o Apache 2.4.7 e o Php 5.4.24 além do MySql que não usamos nesta aplicação.

    O erro listado ao final é este:
    SMTP -> FROM SERVER:220 mx.google.com ESMTP f18sm375403qka.9 – gsmtp
    SMTP -> FROM SERVER: 250-mx.google.com at your service, [201.51.158.115] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
    SMTP -> FROM SERVER:220 2.0.0 Ready to start TLS
    SMTP -> FROM SERVER: 250-mx.google.com at your service, [201.51.158.115] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
    SMTP -> ERROR: Password not accepted from server: 534-5.7.14 Please log in via your web browser and 534-5.7.14 then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/answer/78754 f18sm375403qka.9 – gsmtp
    SMTP -> FROM SERVER:250 2.1.5 Flushed f18sm375403qka.9 – gsmtp
    SMTP Error: Could not authenticate. Erro de envio: SMTP Error: Could not authenticate.

    Vejo que a causa é que a password não foi aceita pelo servidor apesar de correta.

    Já recebi e-mail do google informando: ” Oi website,

    “Recentemente, bloqueamos uma tentativa de login na sua Conta do Google [websitejesus7@gmail.com].”

    Segui os procedimentos sugeridos para liberação e nada se modificou.

    O amigo teria alguma sugestão de como devo lidar com isto?

    Um forte abraço,

    Luiz Carlos Dias – RJ

  48. Roberto, parabéns pelo seu excelente tutorial. O melhor que vi entre todos.

    Perdoe-me incomoda-lo após estes meses de estabilidade nos comentários do seu blog sobre este assunto, mas eu estou a mais de 40 dias tentando usar o PHPMailer mas estava difícil, pois seguia inúmeras sugestões e nada resolvia, mas após ver hoje o seu tutorial fiz exatamente o que explicaste ali e após corrigir os erros que cometi,
    liberar a dll no php.ini etc. finalmente cheguei apenas a uma linha de erro, e com debug umas poucas mais que detalham melhor o erro.

    Li todos os comentários acima, revisei tudo mas esbarrei em um erro que não estou conseguindo resolver.

    Incluí Debug=2 no código após o $mail->Mailer – “smtp” conforme a seguir:

    $mail->Mailer = “smtp”;
    $mail->SMTPDebug = 2;

    Apesar de tudo, ainda estou com erro onde o servidor “gmail “parece não reconhecer a password. Já copiei do próprio servidor e colei no código para eliminar a possibilidade de algum caracter estranho.

    Meu ambiente ainda é o windows Xp com service pack3.
    Uso o Easyphp-DevServer-14.1Vc9 na minha máquina onde realizo os testes e nele vem integrado o Apache 2.4.7 e o Php 5.4.24 além do MySql que não usamos nesta aplicação.

    O erro listado ao final é este:
    SMTP -> FROM SERVER:220 mx.google.com ESMTP f18sm375403qka.9 – gsmtp
    SMTP -> FROM SERVER: 250-mx.google.com at your service, [201.51.158.115] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
    SMTP -> FROM SERVER:220 2.0.0 Ready to start TLS
    SMTP -> FROM SERVER: 250-mx.google.com at your service, [201.51.158.115] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
    SMTP -> ERROR: Password not accepted from server: 534-5.7.14 Please log in via your web browser and 534-5.7.14 then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/answer/78754 f18sm375403qka.9 – gsmtp
    SMTP -> FROM SERVER:250 2.1.5 Flushed f18sm375403qka.9 – gsmtp
    SMTP Error: Could not authenticate. Erro de envio: SMTP Error: Could not authenticate.

    Vejo que a causa é que a password não foi aceita pelo servidor apesar de correta.

    Já recebi e-mail do google informando: ” Oi website,

    “Recentemente, bloqueamos uma tentativa de login na sua Conta do Google [websitejesus7@gmail.com].”

    Segui os procedimentos sugeridos para liberação e nada se modificou.

    O amigo teria alguma sugestão de como devo lidar com isto?

    Um forte abraço,

    Luiz Carlos Dias – RJ

  49. Boa noite Roberto!

    Por favor, poderia ma ajudar? Aqui no meu teste esta ocorrendo o seguinte erro:

    # Time Memory Function Location
    1 0.0025 247184 {main}( ) ..\email.php:0
    2 0.0162 924960 PHPMailer->__construct( ) ..\email.php:39

    Sabe o que pode ser?

    Obrigado!

  50. Pessoal,

    Segui o tutor e quando vou testar, gera o erro:

    Fatal error: Class ‘SMTP’ not found in C:\xampp\htdocs\phpmailer\class.phpmailer.php on line 1443

    O que pode ser?

  51. Fatal error: Class ‘SMTP’ not found in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\PHPMailer-master\class.phpmailer.php on line 1443

    Não vai :(

  52. Não estou conseguindo também. Este é output na página:
    Fatal error: Uncaught Error: Class ‘SMTP’ not found in C:\laragon\www\teste\PHPMailer\class.phpmailer.php:1520 Stack trace: #0 C:\laragon\www\teste\PHPMailer\class.phpmailer.php(1603): PHPMailer->getSMTPInstance() #1 C:\laragon\www\teste\PHPMailer\class.phpmailer.php(1540): PHPMailer->smtpConnect(Array) #2 C:\laragon\www\teste\PHPMailer\class.phpmailer.php(1335): PHPMailer->smtpSend(‘Date: Wed, 21 J…’, ‘Testando PHPMai…’) #3 C:\laragon\www\teste\PHPMailer\class.phpmailer.php(1213): PHPMailer->postSend() #4 C:\laragon\www\teste\enviaEmail.php(42): PHPMailer->send() #5 {main} thrown in C:\laragon\www\teste\PHPMailer\class.phpmailer.php on line 1520

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *