Después de de nuestra extensa compilación de información hemos podido solucionar este dilema que suelen tener ciertos de nuestros usuarios. Te dejamos la respuesta y nuestro objetivo es serte de gran apoyo.
Solución:
El código de @nitin no me funcionaba, ya que faltaba ‘tls’ en el parámetro SMTPSecure.
Aquí hay una versión funcional. También agregué dos líneas comentadas, que puede usar en caso de que algo no funcione.
isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'YourPassword';
$mail->SetFrom('[email protected]', 'FromEmail');
$mail->addAddress('[email protected]', 'ToEmail');
//$mail->SMTPDebug = 3;
//$mail->Debugoutput = function($str, $level) echo "debug level $level; message: $str";; //$mail->Debugoutput = 'echo';
$mail->IsHTML(true);
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body in bold!';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send())
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
else
echo 'Message has been sent';
ACTUALIZACIÓN: abril de 2020
Usando la respuesta aceptada para enviar correo electrónico usando Oficina 365 tiene una alta probabilidad de no funcionar ya que Microsoft está presionando para que Microsoft Graph (el único marco PHP compatible en este momento es Laravel). Si, afortunadamente, aún pudo hacerlo funcionar en su aplicación, el correo electrónico irá a la carpeta de correo no deseado, basura o correo no deseado del destinatario, lo que no desea que suceda.
Los errores comunes que encontré fueron:
Failed to authenticate password. // REALLY FRUSTRATED WITH THIS ERROR! WHY IS MY PASSWORD WRONG?!
o
Failed to send AUTH LOGIN command.
o
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.
Para que funcione con la respuesta aceptada, solo tenemos que cambiar una sola línea, que es la línea del parámetro Contraseña:
$mail->Password = 'YourOffice365Password';
En lugar de configurar la contraseña con la que usa cuando inicia sesión en su cuenta de Office365, debe usar un Contraseña de la aplicación en lugar de.
Crear contraseña de la aplicación
-
Primero, para crear un Contraseña de la aplicación, la autenticación multifactor de su cuenta de Office 365 debe estar habilitada (es posible que deba comunicarse con su administrador para que esto esté habilitado).
-
Después de eso, inicie sesión en Office 365 en su navegador favorito
- Ir a Mi cuenta página (verá el enlace a esta página cuando haga clic en las iniciales de su nombre en la esquina superior derecha)
- Escoger Seguridad y Privacidad luego Verificación de seguridad adicional
- En la parte superior de la página, elija Contraseñas de la aplicación
- Escoger crear para obtener una contraseña de la aplicación
- Si se le solicita, escriba un nombre para la contraseña de su aplicación y haga clic en próximo
- A continuación, verá la contraseña generada por Office 365 como su contraseña de la aplicación
- Copia la contraseña
Después de copiar la contraseña, vuelva a su código de trabajo y reemplace el parámetro Contraseña con la contraseña copiada. Su aplicación ahora debería poder enviar correctamente correo electrónico con Office 365.
Referencia:
Crear una contraseña de aplicación para Microsoft 365
ACTUALIZACIÓN: agosto de 2020
Así que estaba luchando mucho con este problema. Para cuentas comerciales con Exchange Online y acceso al Centro de administración de Microsoft, puedo proporcionar la respuesta.
TLDR: Vaya al Centro de administración y seleccione el usuario al que desea enviar el correo. Luego, busque en la configuración después de Correo electrónico y Aplicaciones de correo electrónico después de la Configuración “SMTP autenticado”, simplemente habilítelo.
¿Sigue sin funcionar? Te tengo cubierto, así es como lo hice funcionar completamente.
- Use PHP Composer, ahorra mucho trabajo en realidad.
- Reemplace su código con mi código y cámbielo después de la prueba
SMTPDebug = SMTP::DEBUG_off;
//SMTP
$mail = new PHPMailer(true); //important
$mail->CharSet = 'UTF-8'; //not important
$mail->isSMTP(); //important
$mail->Host = 'smtp.office365.com'; //important
$mail->Port = 587; //important
$mail->SMTPSecure = 'tls'; //important
$mail->SMTPAuth = true; //important, your IP get banned if not using this
//Auth
$mail->Username = '[email protected]';
$mail->Password = 'yourpassword';
//Set who the message is to be sent from, you need permission to that email as 'send as'
$mail->SetFrom('[email protected]', 'Hosting Group Inc.'); //you need "send to" permission on that account, if dont use [email protected]
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', 'SIMON MÜLLER');
//Set the subject line
$mail->Subject = 'PHPMailer SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('replace-with-file.html'), __DIR__); //you can also use $mail->Body = "This is a body message in html"
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('../../../images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send())
echo 'Mailer Error: ' . $mail->ErrorInfo;
else
- Esto puede parecerse a su archivo, qué está bien, pero ahora viene la parte fácil y complicada. Al igual que Google, Microsoft implementó un “cambio” para las cosas SMTP. Simplemente vaya a su Centro de administración desde su cuenta comercial, o pídale amablemente a alguien con permiso para hacer esa parte:
- navegue hasta https://admin.microsoft.com/AdminPortal/Home#/users
- seleccione el usuario desde el que desea enviar el correo electrónico
- en la pestaña “E-Mail” busque “E-Mail-Apps”, haga clic en “administrar E-Mail-Apps”
- aquí puede seleccionar “SMTP autenticado”, asegúrese de que la opción esté marcada y guarde los cambios
-
si usa MFA, asegúrese de usar una contraseña de aplicación como se menciona en https://stackoverflow.com/a/61359150/14148981
-
Ejecuta el script
Espero que esto ayude a alguien. Me tomó mucho tiempo encontrar esta opción por mí mismo.
valoraciones y reseñas
Si posees alguna incertidumbre y disposición de ascender nuestro post te recomendamos ejecutar un informe y con deseo lo observaremos.