Enviar email con php a traves de office 365

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

Como ya explique en la entrada http://programacionconphp.com/enviar-email-php con phpmailer se realiza de una manera sencilla.

En esta entrada nos vamos a basar en esa publicación y vamos a realizar los ajustes necesarios para utilizar como servidor de correo office 365.

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 office365, como el smtpserver y la autentificación tls.

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

//Configuracion servidor mail
$mail->From = "mail@contoso.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.office365.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@contoso.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, phpmailer y office365.

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@contoso.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.office365.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@contoso.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

2 comentarios en “Enviar email con php a traves de office 365”

Deja un comentario