Send email inside if com phpmailer

Asked

Viewed 465 times

-2

I have already created a folder inside my server phpmailer with the classes Phpmailer.php and SMTP.php. Now I have this code to insert into the database table:

$data = isset($_POST["DataRegisto"]) ? $_POST["DataRegisto"] : '';   
$contacto = isset($_POST["Contacto"]) ? $_POST["Contacto"] : '';    
$telefone = isset($_POST["Telefone"]) ? $_POST["Telefone"] : '';
$crianca = isset($_POST["NomeCrianca"]) ? $_POST["NomeCrianca"] : ''; 
$nascimento = isset($_POST["DataNasc"]) ? $_POST["DataNasc"] : ''; 
$visita = isset($_POST["Visita"]) ? $_POST["Visita"] : '';   
$datavisita = isset($_POST["DataVisita"]) ? $_POST["DataVisita"] : '';
$observacao1 = isset($_POST["Observacao1"]) ? $_POST["Observacao1"] : '';    

$sql = "INSERT INTO InscricoesInf (`DataRegisto`,`Nome`,`Contacto`,`Telefone`,`NomeCrianca`,`DataNasc`,`Visita`,`DataVisita`,`Observacao1`)   VALUES('$data','xxxxxx','$contacto','$telefone','$crianca','$nascimento','$visita','$datavisita','$observacao1')";

$qr = mysqli_query($conn, $sql);
$conn->close();

I intended that whenever I make a new entry in the table of the database send an email to the responsible for this subject.

With the solutions presented I developed my code, is entering in the database, but is not sending the email:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class Mail
{
    public function sendMail($crianca, $contacto, $nascimento, $message)
    {
        require './PHPMailer';
        require './SMTP';
        require './Exception';

        $mail = new PHPMailer();
        try {
            // Server settings
            $mail->isSMTP();                                      // Define o mail para usar o SMTP
            $mail->Host = 'smtp.hotmail.com';                     // Define o host do e-mail
            $mail->SMTPAuth = true;                               // Permite autenticação SMTP 
            $mail->Username = '[email protected]';              // Conta de e-mail que enviará o e-mail
            $mail->Password = 'xxxxxxx';                       // Senha da conta de e-mail
            $mail->SMTPSecure = 'tls';                            // Permite encriptação TLS
            $mail->Port = 587;                                    // Porta TCP que irá se conectar
            $mail->SMTPOptions = array( // Configuração adicional, não obrigatória (caso de erro de ssl)
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );

             // Recipients
            $mail->setFrom('[email protected]', 'Título do e-mail, ou assunto'); // Define o remetente
            $mail->addAddress('[email protected]', 'Contato Site');             // Define o destinário

            // Content
            $mail->isHTML(true); // Define o formato do e-mail para HTML
            $mail->Subject = 'Contato feito pelo site';
            $mail->Body = "
                        <html>
                        <head>
                        </head>
                        <body>
                        <h2>Pedido de Informação</h2>

                        <table>
                          <tr>
                            <th>Nome</th>
                            <th>Telefone</th>
                            <th>Data Nascimento</th>
                          </tr>
                          <tr>
                            <td>$crianca</td> 
                            <td>$contacto</td>
                            <td>$nascimento</td>
                          </tr>
                        </table>

                        <h2>Novo registo nos pedidos de informação./h2>

                        <p>$message</p>

                        </body>
                        </html>";
            $mail->send(); // Envia o e-mail
            return true;
        } catch (Exception $e) { // Se capturar exceção retorna false
            return false;
        }
    }
}

$data = isset($_POST["DataRegisto"]) ? $_POST["DataRegisto"] : '';   
$contacto = isset($_POST["Contacto"]) ? $_POST["Contacto"] : '';    
$telefone = isset($_POST["Telefone"]) ? $_POST["Telefone"] : '';
$crianca = isset($_POST["NomeCrianca"]) ? $_POST["NomeCrianca"] : ''; 
$nascimento = isset($_POST["DataNasc"]) ? $_POST["DataNasc"] : ''; 
$visita = isset($_POST["Visita"]) ? $_POST["Visita"] : '';   
$datavisita = isset($_POST["DataVisita"]) ? $_POST["DataVisita"] : '';
$observacao1 = isset($_POST["Observacao1"]) ? $_POST["Observacao1"] : '';    

$sql = "INSERT INTO InscricoesInf (`DataRegisto`,`Nome`,`Contacto`,`Telefone`,`NomeCrianca`,`DataNasc`,`Visita`,`DataVisita`,`Observacao1`)
VALUES ('$data','xxxxxx','$contacto','$telefone','$crianca','$nascimento','$visita','$datavisita','$observacao1')";

if ($conn->query($sql)) { 
    $Mail = new Mail();
    $Mail->sendEmail('Seu nome', 'Telefone', 'Data Nascimento', 'Mensagem do e-mail');
    $conn->close();
} else {
    echo 'Erro';
}

3 answers

2


To send email with Phpmailer you can define a basic structure that will allow sending emails via connection SMTP or POP3.

Before you start follow the tutorial below:

  1. Download the latest version (in this case it is 6.0.5) of Phpmailer.

  2. Unzip the downloaded file and keep only those files together with the folder src:

    • Exception.php, Oauth.php, Phpmailer.php, POP3.php and SMTP.php;

Now let’s get down to business, sending email.

Let’s define a basic structure for our project.

/seu_projeto/
   |--app/
   |    |--class/
   |    |       |--PHPMailer/
   |    |       |            |--src/
   |    |       |            |     |Exception.php
   |    |       |            |     |OAuth.php
   |    |       |            |     |PHPMailer.php
   |    |       |            |     |POP3.php
   |    |       |            |     |SMTP.php
   |    |Mail.php

With this we can already carry out the e-mail sending script using the class Mail.php. In the example for a basic form.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class Mail
{
    public function sendMail($name, $email, $phone, $subject, $message)
    {
        require 'PHPMailer/src/PHPMailer.php';
        require 'PHPMailer/src/SMTP.php';
        require 'PHPMailer/src/Exception.php';

        $mail = new PHPMailer();
        try {
            // Server settings
            $mail->isSMTP();                                      // Define o mail para usar o SMTP
            $mail->Host = 'smtp.dominio.net';                     // Define o host do e-mail
            $mail->SMTPAuth = true;                               // Permite autenticação SMTP 
            $mail->Username = '[email protected]';              // Conta de e-mail que enviará o e-mail
            $mail->Password = 'exemplo123';                       // Senha da conta de e-mail
            $mail->SMTPSecure = 'tls';                            // Permite encriptação TLS
            $mail->Port = 587;                                    // Porta TCP que irá se conectar
            $mail->SMTPOptions = array( // Configuração adicional, não obrigatória (caso de erro de ssl)
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );

            // Recipients
            $mail->setFrom('[email protected]', 'Título do e-mail, ou assunto'); // Define o remetente
            $mail->addAddress('[email protected]', 'Contato Site');             // Define o destinário

            // Content
            $mail->isHTML(true); // Define o formato do e-mail para HTML
            $mail->Subject = 'Contato feito pelo site';
            $mail->Body = "
                        <html>
                        <head>
                        </head>
                        <body>
                        <h2>Coloque aqui o seu assunto</h2>

                        <table>
                          <tr>
                            <th>Nome</th>
                            <th>E-mail</th>
                            <th>Telefone</th>
                            <th>Assunto</th>
                          </tr>
                          <tr>
                            <td>$name</td>
                            <td>$email</td>  
                            <td>$phone</td>
                            <td>$subject</td>
                          </tr>
                        </table>

                        <h2>Conteúdo da mensagem</h2>

                        <p>$message</p>

                        </body>
                        </html>";
            if (!$mail->send()) {
               echo "Mailer Error: " . $mail->ErrorInfo;
               return true;
            } else {
               echo "Mensagem enviada";
               return false;
            } 
        } catch (Exception $e) { // Se capturar exceção retorna false
            return false;
        }
    }
}

To send email if your connection was successful you could use a structure similar to this:

 ...    

if (mysqli_query($conn, $sql)) {
    $Mail = new Mail();
    $Mail->sendEmail('Seu nome', 'Email', 'Telefone', 'Assunto do e-mail', 'Mensagem do e-mail');
    $conn->close();
} else {
    echo 'Erro';
}

References

  • you can check the edition I made in the question with the code developed following your example?

  • Place this line of code and see if it shows any error message: $mail->SMTPDebug = 2;. Another thing, remember to follow the structure of the folders as I put in my example, it is essential for it to work.

  • but my code is correct? No error detected? The folder structure is correct

  • @Beginner, I updated my reply in the part of the Mail class where the sending of e-mail is performed. Now check and see if it shows error message.

  • we can chat just to ask some questions that I think the problem will be there?

  • Yes, it is possible

  • already managed to solve the problem and already sends emails

  • Glad it worked out! If my answer helped please consider a positive vote and mark as the correct one!

Show 4 more comments

0

Phpmailer is a ready-to-send class only has to integrate this code into the database code to send an email with few options and simple. (This will only work if your server is allowed to send SMTP emails)

 // Incluir phpmailer.php localizado na pasta x
 require_once("x/PHPMailer.php");

 // Inicia a classe PHPMailer
 $mail = new PHPMailer(true);

 $mail->IsSMTP(); // Define que a mensagem será SMTP

 try {
 $mail->Host = 'smtp.dominio.com'; // Endereço do servidor SMTP (Autenticação, utilize o host smtp.dominio.com)
 $mail->SMTPAuth   = true;  // Usar autenticação SMTP
 $mail->Port       = 587; //  Usar 587 porta SMTP
 $mail->Username = 'usuário de smtp'; // Usuário do servidor SMTP 
 $mail->Password = 'senha de smtp'; // Senha do servidor SMTP 

 //Define o remetente
 // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=    
 $mail->SetFrom('[email protected]', 'Nome'); //Seu e-mail
 $mail->AddReplyTo('[email protected]', 'Nome'); //Seu e-mail
 $mail->Subject = 'Assunto';//Assunto do e-mail

 //Email da responsável
 $mail->AddAddress('[email protected]', '');

 //Define o corpo do email
 $mail->MsgHTML('corpo do email'); 

 $mail->Send();
 echo "Mensagem enviada com sucesso</p>\n";

//caso apresente algum erro é apresentado abaixo com essa exceção.
}catch (phpmailerException $e) {
  echo $e->errorMessage(); //Mensagem de erro costumizada pelo PHPMailer
}
?>

0

First inside my project folder I created a folder with the name phpmailer and inside that folder I put these two files: class.phpmailer.php and class.smtp.php, I downloaded on the site I leave at the end of the reply.

Then in the php file where I insert the data I have this code:

<?php 
require ("phpmailer/class.phpmailer.php");
require ("phpmailer/class.smtp.php");

# Inicia a classe PHPMailer
$mail = new PHPMailer();

# Define os dados do servidor e tipo de conexão
$mail->IsSMTP(); // Define que a mensagem será SMTP
$mail->CharSet = 'utf-8';
$mail->Host = "smtp.gmail.com"; # Endereço do servidor SMTP, na WebHS basta usar localhost caso a conta de email esteja na mesma máquina de onde esta a correr este código, caso contrário altere para o seu desejado ex: mail.nomedoseudominio.pt
$mail->Port = 587; // Porta TCP para a conexão
$mail->SMTPSecure = 'tls';
$mail->SMTPAutoTLS = false; // Utiliza TLS Automaticamente se disponível
$mail->SMTPAuth = true; # Usar autenticação SMTP - Sim
$mail->Username = '[email protected]'; # Login de e-mail
$mail->Password = 'xxxxxxxx'; // # Password do e-mail
# Define o remetente (você)
$mail->From = "[email protected]"; # Seu e-mail
$mail->FromName = "xxxxxxxx"; // Seu nome
# Define os destinatário(s)
$mail->AddAddress('[email protected]', 'xxxxxxxxx'); # Os campos podem ser substituidos por variáveis
#$mail->AddAddress('[email protected]'); # Caso queira receber uma copia
#$mail->AddCC('[email protected]', 'Pessoa Nome 2'); # Copia
#$mail->AddBCC('[email protected]', 'Pessoa Nome 3'); # Cópia Oculta
# Define os dados técnicos da Mensagem
$mail->IsHTML(true); # Define que o e-mail será enviado como HTML
#$mail->CharSet = 'iso-8859-1'; # Charset da mensagem (opcional)
# Define a mensagem (Texto e Assunto)
$mail->Subject = "Teste"; # Assunto da mensagem
$mail->Body = "xxxxxxxxxxxxxxx";
$mail->AltBody = "Este é o corpo da mensagem de teste, somente Texto! \r\n :)";

# Define os anexos (opcional)
#$mail->AddAttachment("c:/temp/documento.pdf", "documento.pdf"); # Insere um anexo
# Envia o e-mail
$enviado = $mail->Send();

# Limpa os destinatários e os anexos
$mail->ClearAllRecipients();
$mail->ClearAttachments();

$data = isset($_POST["DataRegisto"]) ? $_POST["DataRegisto"] : ''; 
$contacto = isset($_POST["Contacto"]) ? $_POST["Contacto"] : ''; 
$telefone = isset($_POST["Telefone"]) ? $_POST["Telefone"] : ''; 
$crianca = isset($_POST["NomeCrianca"]) ? $_POST["NomeCrianca"] : ''; 
$nascimento = isset($_POST["DataNasc"]) ? $_POST["DataNasc"] : ''; 
$visita = isset($_POST["Visita"]) ? $_POST["Visita"] : ''; 
$datavisita = isset($_POST["DataVisita"]) ? $_POST["DataVisita"] : ''; 
$observacao1 = isset($_POST["Observacao1"]) ? $_POST["Observacao1"] : ''; 

$sql = "INSERT INTO InscricoesInf (`DataRegisto`,`Contacto`,`Telefone`,`NomeCrianca`,`DataNasc`,`Visita`,`DataVisita`,`Observacao1`) 
VALUES ('$data','$contacto','$telefone','$crianca','$nascimento','$visita','$datavisita','$observacao1')"; 

if ($conn->query($sql)) { 
if ($enviado) {
echo "E-mail enviado com sucesso!";
} else {
echo "Não foi possível enviar o e-mail.";
echo "<b>Informações do erro:</b> " . $mail->ErrorInfo;
}

} else {
   // get the error, throw a message...
}
$conn->close();

?>

And this way you send the email right. In the content of the message have the possibility to improve creating table or what is most suitable for what they want.

I also leave here the link with the tutorial I followed:

https://www.webhs.pt/tutoriais/nao-funcao-mail-aprenda-usar-phpmailer-smtp-autenticado/

Browser other questions tagged

You are not signed in. Login or sign up in order to post.