6
respostas

Envio de Email

Boa noite, gostaria de saber se alguém poderia me explicar como fazer o envio de email no PHPMailer, acho que houve uma atualização e as bibliotecas que estão no código do curso não funcionam mais

6 respostas

Um código de exemplo simples para enviar email com o PHPMailer, ficaria assim:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);
try {
    //Configurações do servidor
    $mail->SMTPDebug = 2;                                 // Habilite a saída de depuração detalhada
    $mail->isSMTP();                                      // Defina mail para usar SMTP
    $mail->Host = 'smtp1.exemplo.com;smtp2.exemplo.com';  // Especificar servidores SMTP principais e de backup
    $mail->SMTPAuth = true;                               // Ativar autenticação SMTP
    $mail->Username = 'usuario@exemplo.com.br';                 // SMTP email
    $mail->Password = 'senha';                           // SMTP senha
    $mail->SMTPSecure = 'tls';                            // Ativar criptografia TLS, também aceita `ssl`
    $mail->Port = 587;                                    // Número da porta TCP

    //Destinatario
    $mail->setFrom('destinatario@exemplo.com', 'Mailer');
    $mail->addAddress('joe@exemplo.net', 'Joe Usuário');     // Pra quem você quer enviar o email, nome é opcional
    $mail->addAddress('ellen@exemplo.com');               
    $mail->addReplyTo('info@exemplo.com', 'Informações');
    $mail->addCC('cc@exemplo.com');
    $mail->addBCC('bcc@exemplo.com');

    //Anexo
    $mail->addAttachment('/var/tmp/file.tar.gz');         // Caso queira anexo
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Exemplo com nome, mas o nome é opcional

    //Conteudo
    $mail->isHTML(true);                                  // Se o email for em HTML você tem que deixar como true
    $mail->Subject = 'Título da mensagem';
    $mail->Body    = 'Corpo da mesangem';
    $mail->AltBody = 'Um corpo mais simples pra que não da suporte a email com HTML';

    $mail->send();
    echo 'Só pra ver no terminal se a mesagem foi enviada';
} catch (Exception $e) {
    echo 'Aqui é pra vermos se a mensagem deu ruim';
    echo 'Qual é o erro que tivemos: ' . $mail->ErrorInfo;
}

Espero que ajude. Se tiver dúvidas sobre o código só perguntar.

Eu também estou tendo problemas para enviar o e-mail. Já desativei o firewall e o antivírus, configurei minha conta para permitir acesso de outros aplicativos entre outras coisas. Quando eu tenho enviar o e-mail é retornado o seguinte:

Available
SMTP não ativo
2017-09-26 00:51:04 CLIENT -> SERVER: EHLO localhost
2017-09-26 00:51:04 CLIENT -> SERVER: STARTTLS
SMTP Error: Could not connect to SMTP host.
2017-09-26 00:51:04 CLIENT -> SERVER: QUIT
2017-09-26 00:51:04 SMTP ERROR: QUIT command failed: 
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troublesh

Já tentei acessar a página do google sugerida no output mas não encontrei nada. Como podem ver eu coloquei para imprimir se o serviço SMTP estava ativo e esta mostrando que NÃO esta.

Tive que fazer algumas alterações no código mostrado na aula, pois a biblioteca estava desatualizada. Meu código ficou assim:

<?php
session_start();
$nome = $_POST["nome"];
$email = $_POST["email"];
$mensagem = $_POST["mensagem"];

require "PHPMailer.php";
require "OAuth.php";
require "SMTP.php";
require "POP3.php";
require "Exception.php";

use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer;

echo !extension_loaded('openssl')?"Not Available":"Available";
$mail->isSMTP();
if ($mail->isSMTP()){
    echo 'SMTP ativo';    
}  else{
    echo "SMTP não ativo";    
} 
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tsl';
$mail->SMPTAuth = true;
$mail->SMTPDebug = 1;
$mail->Username = "xxxxxxx@gmail.com";
$mail->Password = "xxxxxx";


$mail->setFrom('xxxxxxx@gmail.com', 'Alura Curso PHP e MySQL');
$mail->addAddress("xxxxxxxx@gmail.com");
$mail->Subject = "E-mail de contato da loja";
$mail->msgHTML("<html>de: {$nome}<br/>email: {$email}<br/>mensagem: {$mensagem}");
$mail->AltBody = "de: {$nome}\nemail: {$email}\nmensagem: {$mensagem}";

 if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
die();

Também tenho certeza de que o e-mail esta correto. Alguma ideias de qual é problema?

Cara, eu dei uma abandonada no PHP no momento, por isso não resolvi esse erro, mas acredito que alguém vai te ajudar sim, tenta criar um novo tópico, acho que assim as chances de algum Moderador, ADM ou instrutor ver sua pergunta será maior.

Blz, valeu Guilherme

O mesmo problema, alguém conseguiu resolver isso?????????????????

Boa tarde, estava com esse problema, segui os passos que o Leandro postou no tópico abaixo e funcionou:

https://cursos.alura.com.br/forum/topico-envio-de-email-via-smtp-falha-de-conexao-42607