Konfigurasikan PHPMailer untuk menggunakan Office 365 SMTP
P粉510127741
P粉510127741 2023-10-16 10:39:47
0
2
794

Saya cuba menyediakan PHPMailer supaya salah seorang pelanggan kami boleh menjana e-mel secara automatik daripada akaun mereka sendiri. Saya log masuk ke akaun Office 365 mereka dan mendapati bahawa tetapan yang diperlukan untuk PHPMailer ialah:

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

Saya telah menggunakan tetapan ini pada PHPMailer, tetapi tiada e-mel dihantar (fungsi yang saya panggil adalah untuk mel kami sendiri, yang dihantar dari pelayan luaran (bukan yang melayani halaman 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

Adakah sesiapa tahu tetapan apa yang diperlukan untuk PHPMailer hantar melalui smtp.offi ce365.com?

P粉510127741
P粉510127741

membalas semua(2)
P粉176151589

Dikemas kini: Mei 2022

Jadi saya sedang bergelut dengan isu ini. Saya boleh memberikan jawapan kepada soalan ini untuk akaun perusahaan dengan akses kepada Exchange Online dan Pusat Pentadbiran Microsoft.

TLDR: Pergi ke pusat pentadbir dan pilih pengguna yang ingin anda hantar mel. Kemudian selepas menyediakan "SMTP yang disahkan" lihat tetapan selepas "E-mel" dan "Aplikasi E-mel" dan hanya membolehkannya.

Masih tidak berfungsi? Saya telah membantu anda, berikut ialah cara saya membuatnya berfungsi sepenuhnya.

  1. Menggunakan Komposer PHP sebenarnya menjimatkan banyak kerja.
  2. Ganti kod anda dengan kod saya dan tukar selepas ujian
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. Ini mungkin kelihatan seperti fail anda dan tidak mengapa, tetapi kini datang bahagian yang sukar. Seperti Google, Microsoft telah melaksanakan "suis" untuk SMTP. Hanya pergi ke pusat pentadbir anda daripada akaun perniagaan anda, atau minta seseorang yang mempunyai kebenaran untuk melakukan bahagian itu:
  • Navigasi ke https://admin.microsoft.com/AdminPortal/Home#/users
  • Pilih pengguna yang ingin anda hantar e-mel
  • Cari “Apl E-mel” di bawah tab “E-mel” dan klik “Urus Apl E-mel”
  • Di sini anda boleh memilih "SMTP yang disahkan", pastikan pilihan itu ditandakan dan simpan perubahannya
  1. Jika anda menggunakan MFA, pastikan anda menggunakan kata laluan apl a/61359150/14148981 seperti yang dinyatakan dalam https://stackoverflow.com/

  2. Jalankan skrip

Saya harap ini membantu seseorang. Saya mengambil masa yang lama untuk mencari pilihan ini.

Dapatkan ringkasan semua langkah untuk kata laluan dan pengesahan apl:

  1. Gunakan akaun pentadbir:
  • AD Direktori Aktif -> Sifat -> Lalai Keselamatan: Mati.
  • Portal Direktori Aktif -> Akses Bersyarat -> Konfigurasikan IP Dipercayai MFA -> Benarkan Kata Laluan Aplikasi Pengguna: Dayakan
  • Senarai pengguna halaman pentadbir -> "Pengesahan berbilang faktor" untuk pengguna sasaran: dayakan kemudian paksa
  • Urus Senarai Pengguna Halaman -> Butiran Pengguna -> Mel -> "Urus Aplikasi E-mel" -> "SMTP Disahkan": Dayakan
  1. Gunakan Akaun Pengguna:
  • Profil Akaun Pengguna -> Keselamatan -> Tambah Kaedah Log Masuk: Kata Laluan Apl
  1. Tetapan Pengirim PHP:
  • smtp.office365.com, 587, tls, e-mel, appPassword
P粉395056196

Kod

@nitin tidak berfungsi untuk saya kerana ia tiada "tls" dalam parameter SMTPSecure.

Ini adalah versi yang berfungsi. Saya juga telah menambah dua baris komen yang boleh anda gunakan jika masalah timbul.

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';
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan