cari

Rumah  >  Soal Jawab  >  teks badan

Konfigurasikan PHPMailer untuk menggunakan Office 365 SMTP

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粉510127741P粉510127741425 hari yang lalu788

membalas semua(2)saya akan balas

  • P粉176151589

    P粉1761515892023-10-17 10:00:21

    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:
    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

    balas
    0
  • P粉395056196

    P粉3950561962023-10-17 00:05:06

    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';
    }

    balas
    0
  • Batalbalas