Enviar email con php a traves de gmail

5/5 - (2 votos)

En multitud de ocasiones nos vemos en la necesidad de realizar envíos a un email a través deun formulario.

En la entrada de 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 ficehro index.php y lo primero que vamos a hacer es añadir son las librerias de bootstrap omo 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>';
}

Con esto ya se podrian enviar el email con php, en el caso de no poder enviar el email, seguramente sea a que necesitais activar el acceso para aplicaciones menos seguras mediante este enlace. https://myaccount.google.com/u/0/lesssecureapps?pli=1

Acceso para aplicaciones menos seguras

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

23 comentarios en «Enviar email con php a traves de gmail»

  1. Funciona y no solo con el servidor de gmail, yo intente con mi servidor web y funciona sin seguridad ssl.
    Como envias por este medio un email con formato HTML?

    Responder
  2. Hola, Gracias por tu tiempo, resulta que si me funciona me envía el correo o eso dice el Alert sin embargo no llega el correo a la bandeja en gmail. Ya tengo permitido el acceso a aplicaciones menos seguras. Gracias de ante mano si me llegas a contestar. Gracias!

    Responder
  3. hola puedo enviar correos automaticos desde un servidor en la nube, desde mi localhost si me funciona pero quiero subirlo a un servidor para que despues de registrarse les envie un correo con la clav. gracias por el apoyo

    Responder
  4. Ya me envia el email, pero desde localhost en wamp y ahora quiero hacerlo de manera pública, porque ya subí mi página a godaddy, Cómo le hago?

    Responder
  5. Buenos días, escribo por si alguien lo necesita, pueden poner :$mail->FromName = «SU nombre»; para que al enviarlo no Aparezca como nombre Root User

    Responder
  6. el valor de puerto cámbienlo por 25 y funciona, para quienes les da error.
    «De manera similar, para los números de puerto, el puerto SMTP predeterminado es 25, pero algunos servidores de correo usan puertos personalizados, como 587, para evitar el spam.»
    https://bobcares.com/blog/phpmailer-smtp-error-could-not-authenticate/#:~:text=%E2%80%9Csmtp%20error%3A%20could%20not%20authenticate%E2%80%9D%20is%20a%20common%20error,connection%20to%20the%20mail%20server.

    Responder
  7. Buenas! tienes código que me oriente para leer los asuntos de un correo gmail? y una pregunta… activar el acceso para aplicaciones menos seguras no ocasiona problemas de seguridad para la cuenta? Gracias.

    Responder

Deja un comentario