Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the server-ip-memory-usage domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/nahhjace/public_html/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the login-customizer domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/nahhjace/public_html/wp-includes/functions.php on line 6114
Enviar email con php a traves de office 365 – Maurotech

Maurotech

BLOG TI Sistemas y Diseño

Office 365PHP

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

Loading