Configurer PHPMailer pour utiliser Office 365 SMTP
P粉510127741
P粉510127741 2023-10-16 10:39:47
0
2
764

J'essaie de configurer PHPMailer pour qu'un de nos clients puisse générer automatiquement des e-mails à partir de son propre compte. Je me suis connecté à leur compte Office 365 et j'ai constaté que les paramètres requis pour PHPMailer sont :

Host: smtp.off   ice365.com
Port: 587
Auth: tls

J'ai appliqué ces paramètres à PHPMailer, mais aucun e-mail n'est envoyé (la fonction que j'appelle concerne notre propre courrier, qui est envoyé depuis un serveur externe (pas celui qui dessert la page Web)).

"host"      => "smtp.of   fice365.com",
"port"      => 587,
"auth"      => true,
"secure"    => "tls",
"username"  => "clientemail@off  ice365.com",
"password"  => "clientpass",
"to"        => "myemail",
"from"      => "clientemail@of  fice365.com",
"fromname"  => "clientname",
"subject"   => $subject,
"body"      => $body,
"altbody"   => $body,
"message"   => "",
"debug"     => false

Est-ce que quelqu'un sait quels paramètres sont requis pour que PHPMailer envoie via smtp.offi ce365.com ?

P粉510127741
P粉510127741

répondre à tous(2)
P粉176151589

Mise à jour : mai 2022

Je suis donc aux prises avec ce problème. Je peux fournir la réponse à cette question pour les comptes d’entreprise ayant accès à Exchange Online et Microsoft Admin Center.

TLDR : accédez au centre d'administration et sélectionnez l'utilisateur auquel vous souhaitez envoyer un e-mail. Ensuite, après avoir configuré "SMTP authentifié", regardez les paramètres après "E-mail" et "Application de messagerie" et activez-le simplement.

Vous ne travaillez toujours pas ? Je suis là pour vous, voici comment je l'ai fait fonctionner complètement.

  1. L'utilisation de PHP Composer permet d'économiser beaucoup de travail.
  2. Remplacez votre code par le mien et changez après test
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 = 'yourname@mail.org';
$mail->Password = 'your APP password';//Steps mentioned in last are to create App password

//Set who the message is to be sent from, you need permission to that email as 'send as'
$mail->SetFrom('hosting@mail.org', 'Hosting Group Inc.'); //you need "send to" permission on that account, if dont use yourname@mail.org

//Set an alternative reply-to address
$mail->addReplyTo('no-reply@mail.com', 'First Last');

//Set who the message is to be sent to
$mail->addAddress('customer@othermail.com', '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 {
}
  1. Cela peut ressembler à votre fichier et ce n'est pas grave, mais vient maintenant la partie la plus délicate. Comme Google, Microsoft a mis en place un « switch » pour SMTP. Accédez simplement à votre centre d'administration à partir de votre compte professionnel ou demandez à une personne autorisée de faire cette partie :
  • Accédez à https://admin.microsoft.com/AdminPortal/Home#/users
  • Sélectionnez l'utilisateur à partir duquel vous souhaitez envoyer des e-mails
  • Recherchez « Applications de messagerie » sous l'onglet « E-mail » et cliquez sur « Gérer les applications de messagerie »
  • Ici, vous pouvez sélectionner "SMTP authentifié", assurez-vous que cette option est cochée et enregistrez les modifications
  1. Si vous utilisez MFA, assurez-vous d'utiliser le mot de passe de l'application a/61359150/14148981 comme mentionné dans https://stackoverflow.com/

  2. Exécutez le script

J'espère que cela aidera quelqu'un. Il m'a fallu beaucoup de temps pour trouver cette option.

Obtenez un résumé de toutes les étapes pour les mots de passe et l'authentification des applications :

  1. Utilisez un compte administrateur :
  • Active Directory AD -> Propriétés -> Sécurité par défaut : Désactivé.
  • Portail Active Directory -> Accès conditionnel -> Configurer les adresses IP de confiance MFA -> Autoriser le mot de passe de l'application utilisateur : activer
  • Liste des utilisateurs de la page d'administration -> "Authentification multifacteur" pour les utilisateurs cibles : activer puis forcer
  • Gérer la liste des utilisateurs de la page -> Détails de l'utilisateur -> Mail -> "Gérer l'application de messagerie" -> "SMTP authentifié" : Activer
  1. Utiliser le compte utilisateur :
  • Profil du compte utilisateur -> Sécurité -> Ajouter une méthode de connexion : mot de passe de l'application
  1. Paramètres de messagerie PHP :
  • smtp.office365.com, 587, tls, email, appPassword
P粉395056196

Le code de @nitin n'a pas fonctionné pour moi car il manquait "tls" dans le paramètre SMTPSecure.

Ceci est une version fonctionnelle. J'ai également ajouté deux lignes commentées que vous pouvez utiliser en cas de problème.

isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port       = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth   = true;
$mail->Username = 'somebody@somewhere.com';
$mail->Password = 'YourPassword';
$mail->SetFrom('somebody@somewhere.com', 'FromEmail');
$mail->addAddress('recipient@domain.com', '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';
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal