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