Panduan Mudah: Menggunakan PHPMailer untuk Menghantar E-mel Ujian
P粉344355715
2023-08-26 21:06:15
<p>Saya menjalankan pelayan Apache2 tempatan pada Debian/Bullseye. Saya telah cuba membuat PHPMailer berfungsi tetapi tidak berjaya. Nampaknya terdapat dua cara berbeza untuk memasang PHPMailer - yang pertama menggunakan komposer, yang merupakan kaedah pertama yang saya cuba. Ia mencipta folder vendor dalam akar tapak, yang mengandungi fail autoload.php, serta beberapa fail lain. Fail mengandungi kandungan berikut: </p>
<pre class="brush:php;toolbar:false;"><?php
// autoload.php @generated by Composer
memerlukan_sekali __DIR__ '/composer/autoload_real.php';
kembalikan ComposerAutoloaderInitd359baac21f520c04e608f4eed750560::getLoader();</pre>
<p>Ini kelihatan tidak lengkap (tiada teg penutup). Bagaimanapun, saya tidak boleh mendapatkan contoh "test.php" untuk berfungsi. </p>
<p>Kaedah lain ialah memuat turun fail .zip daripada tapak web gethub dan mengekstraknya ke direktori akar tapak. Selepas menamakan semula, saya mendapat folder PHPMailer. Menggunakan contoh "mailer.php" juga tidak mempunyai kesan. </p>
<p>Dalam kedua-dua kes, saya mengubah suai maklumat smtp untuk menggunakan maklumat akaun sebenar untuk domain (menghantar e-mel, kata laluan log masuk, nama pelayan smtp, keselamatan smtp hos dan tetapan port), tetapi saya tidak membalas penolakan e-mel telah diterima. Tiada apa yang berlaku. Apa yang saya lihat hanyalah halaman web kosong. </p>
<p> Saya mempunyai php berjalan kerana skrip php yang saya gunakan sebelum ini masih berfungsi (dari tapak ujian saya - tapak sebenar kini berkeras untuk menggunakan smtp dan tidak membenarkan saya memasang modul PEAR).</p>
<p>Inilah skrip mailer.php yang saya gunakan - beberapa butiran tersembunyi: </p>
<pre class="brush:php;toolbar:false;"><?php
//Import kelas PHPMailer ke dalam ruang nama global
//Ini mesti berada di bahagian atas skrip, bukan di dalam fungsi
gunakan PHPMailerPHPMailerPHPMailer;
gunakan PHPMailerPHPMailerSMTP;
gunakan PHPMailerPHPMailerException;
memerlukan 'PHPMailer/src/Exception.php';
memerlukan 'PHPMailer/src/PHPMailer.php';
memerlukan 'PHPMailer/src/SMTP.php';
//Buat contoh; lulus 'benar' untuk membolehkan pengecualian
$mel = PHPMailer baharu(benar);
Cubalah
{
//Tetapan pelayan
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Dayakan output penyahpepijatan terperinci
$mail->isSMTP(); //Hantar menggunakan SMTP
$mail->Host = 'mel.<domain>.ca'; //Tetapkan pelayan SMTP untuk dihantar
$mail->SMTPauth = benar; //Dayakan pengesahan SMTP
$mail->Nama pengguna = 'mail@<domain>.ca'; // nama pengguna SMTP
$mail->Kata Laluan = '<rahsia>'; //kata laluan SMTP
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Dayakan penyulitan TLS tersirat
$mail->Port = 465; //port TCP untuk disambungkan ke;
//penerima
$mail->setFrom('mail@<domain>.ca', ‘daripada saya’);
$mail->addAddress('gary@<domain>.ca', ‘kepada saya’); //Tambah penerima
// $mail->addAddress('Recipient@emailaddress.com'); //Nama adalah pilihan
// $mail->addReplyTo('nama anda@domain.com', 'Nama Anda');
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
//Lampiran (pilihan)
// $mail->addAttachment('/var/tmp/file.tar.gz'); //Tambah lampiran
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Nama pilihan
//kandungan
$mail->isHTML(true); //Tetapkan format e-mel kepada HTML
$mail->Subject = 'Ini adalah subjek';
$mail->Body = 'Ini ialah badan mesej HTML dalam huruf tebal!';
$mail->AltBody = 'Ini ialah isi dalam teks biasa untuk klien mel bukan HTML';
$mail->hantar();
echo 'Mesej telah dihantar';
}
tangkapan (Pengecualian $e)
{
echo "Mesej tidak dapat dihantar Ralat Pengirim: {$mail->ErrorInfo}";
}
?></pra>
<p>Barisan TLS adalah daripada syarikat pengehosan, jadi saya menganggap ia betul. </p>
<p>Saya telah mengulas pilihan yang saya tidak perlukan dalam ujian saya, tetapi ia masih tidak berfungsi. Bolehkah sesiapa mengetahui apa yang saya lakukan salah? </p>
<p>Terima kasih. </p>
Baiklah, faham. Syarikat pengehosan menyediakan kod ujian, dan contoh mereka menggunakan smtp.domain.com. Sebenarnya, pelayan smtp mereka adalah mel, bukan smtp. Saya rasa kod itu hanya berhenti berjalan apabila berhadapan dengan pelayan yang tidak wujud...