Enviar email con php a traves de gmail 2022

5/5 - (6 votos)

Como ya he explicado en la entrada https://programacionconphp.com/enviar-email-php/ desde Mayo de 2022 google ya no deja enviar correos como aplicaciones no seguras y ahora se necesita crear uan contraseña de aplicación.

Con esta pequeña entrada os voy a explicar como conseguir una contraseña de apliación paso a paso.

Lo primero que necesitaremos es habilitar la verificación en dos pasos y lo haremos clicando en :
Gestionar tu cuenta de Google –> Seguridad –> Verificación en dos pasos

Nos pedira un numero de telefono para autenticar la cuenta y una vez que lo tengamos hecho el paso siguiente sera generar la contraseña de aplicación.

Clicaremos en Gestionar tu cuenta de Google –> Seguridad –> Contraseña de aplicaciones, seleccionamos Otra y ponemos el nombre que queramos.

Y por ultimos clicamos en GENERAR y obtendremos la contraseña a utilizara para enviar los correos.

Y ya podemos continuar con el resto del tutorial.

A continuaciónn hoy voy a explicar un ejemplo de como enviar un email utilizando gmail como medio de envio.

La aplicación se va a componer en dos ficheros, index.html que sera el formulario a rellenar y send.php que se encargara de realziar el envió del mail en php.

Empezaremos con el fichero index.php y lo primero que vamos a hacer es añadir son las librerias de bootstrap como ya explique en la entrada aplicar-estilos-a-un-menu-dinamico-en-php-con-bootstrap.

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta charset="UTF-8">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>

Y a continuación añadiré el formulario con los inputs necesarios, asunto, destinatario y cuerpo del mensaje y en action incluire el fichero send.php que se encargara de realizar el envio.

  <form method="POST" action="send.php">
    <label for="subject">Asunto:
      <input type="text" name="subject" id="subject">
    </label>
    <br>
    <label for="email">Email destinatario:
      <input type="email" name="email" id="email">
    </label>
    <br>
    <label for="message">Mensaje:
      <textarea name="message" id="message" rows="8" cols="20"></textarea>
    </label>
    <br>
    <input type="submit" value="Send">
  </form>

Ahora voy a crear el fichero send.php y lo primero que voy a hacer es incluir la librería phpmailer.

require 'PHPMailer/PHPMailerAutoload.php';

La libreria la he obtenido de github la version mas reciente. https://github.com/PHPMailer/PHPMailer/tree/5.2-stable

El siguiente paso es instanciar la clase phmailer e incluir los datos smtp del servidor de gmail.

//Create a new PHPMailer instance
$mail = new PHPMailer();
$mail->IsSMTP();

//Configuracion servidor mail
$mail->From = "mail@gmail.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.gmail.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@gmail.com'; //nombre usuario
$mail->Password = 'password'; //contraseña

Ahora añadimos el asunto, destinatario y cuerpo del mensaje recibiéndolo del post del formulario.

//Agregar destinatario
$mail->AddAddress($_POST['email']);
$mail->Subject = $_POST['subject'];
$mail->Body = $_POST['message'];

Y por ultimo enviamos el mail, usando una condición y enviado una alerta si no se puede enviar.

//Avisar si fue enviado o no y dirigir al index
if ($mail->Send()) {
    echo'<script type="text/javascript">
           alert("Enviado Correctamente");
        </script>';
} else {
    echo'<script type="text/javascript">
           alert("NO ENVIADO, intentar de nuevo");
        </script>';
}

El codigo final es el siguiente:

index.php

<!DOCTYPE html>
<html>

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta charset="UTF-8">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>

<body>
  <h1>Enviar mail</h1>

  <form method="POST" action="send.php">
    <label for="subject">Asunto:
      <input type="text" name="subject" id="subject">
    </label>
    <br>
    <label for="email">Email destinatario:
      <input type="email" name="email" id="email">
    </label>
    <br>
    <label for="message">Mensaje:
      <textarea name="message" id="message" rows="8" cols="20"></textarea>
    </label>
    <br>
    <input type="submit" value="Send">
  </form>

</body>

</html>

send.php

<?php

//librerias
  require 'PHPMailer/PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();
$mail->IsSMTP();

//Configuracion servidor mail
$mail->From = "mail@gmail.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.gmail.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@gmail.com'; //nombre usuario
$mail->Password = 'password'; //contraseña

//Agregar destinatario
$mail->AddAddress($_POST['email']);
$mail->Subject = $_POST['subject'];
$mail->Body = $_POST['message'];

//Avisar si fue enviado o no y dirigir al index
if ($mail->Send()) {
    echo'<script type="text/javascript">
           alert("Enviado Correctamente");
        </script>';
} else {
    echo'<script type="text/javascript">
           alert("NO ENVIADO, intentar de nuevo");
        </script>';
}

Y el codigo lo podeis obtener aqui: https://github.com/victorgarciasisi/enviarEmailPHP

1 comentario en «Enviar email con php a traves de gmail 2022»

Deja un comentario