Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengesanan e-mel PHP: Tentukan sama ada e-mel telah berjaya dihantar.

Pengesanan e-mel PHP: Tentukan sama ada e-mel telah berjaya dihantar.

WBOY
WBOYasal
2023-09-19 09:16:551772semak imbas

Pengesanan e-mel PHP: Tentukan sama ada e-mel telah berjaya dihantar.

Pengesanan e-mel PHP: Tentukan sama ada e-mel telah berjaya dihantar.

Apabila membangunkan aplikasi web, selalunya perlu menghantar e-mel untuk berkomunikasi dengan pengguna Sama ada pengesahan pendaftaran, penetapan semula kata laluan atau pemberitahuan, fungsi e-mel adalah bahagian yang amat diperlukan. Walau bagaimanapun, kadangkala kami tidak dapat memastikan sama ada e-mel benar-benar berjaya dihantar, jadi kami perlu melakukan pengesanan e-mel dan menentukan sama ada e-mel tersebut telah berjaya dihantar. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi ini.

1. Gunakan pelayan SMTP untuk menghantar e-mel

Pertama sekali, kita perlu menggunakan pelayan SMTP untuk menghantar e-mel, kerana protokol SMTP menyediakan mekanisme penghantaran e-mel yang boleh dipercayai. Dalam PHP, kita boleh menggunakan perpustakaan kelas SMTP untuk melaksanakan fungsi ini.

require 'path/to/phpmailer/autoload.php';

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;

$mail = new PHPMailer(true);
try {
    $mail->SMTPDebug = 0;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.example.com';                      // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'your-email@example.com';           // SMTP username
    $mail->Password = 'your-email-password';              // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    $mail->setFrom('your-email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name');
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Test Subject';
    $mail->Body    = 'This is a test email.';

    $mail->send();
    echo 'Email has been sent.';
} catch (Exception $e) {
    echo 'Email could not be sent. Error: ', $mail->ErrorInfo;
}

Kod ini menggunakan perpustakaan kelas PHPMailer, mengkonfigurasi maklumat berkaitan pelayan SMTP dan menghantar e-mel ujian.

2. Pengesanan Status E-mel

Menghantar e-mel tidak bermakna e-mel itu sebenarnya telah diterima, jadi kita perlu menggunakan pengesanan status e-mel untuk menentukan sama ada e-mel tersebut telah berjaya dihantar. Dalam PHP, kita boleh mendapatkan status mel melalui respons pelayan SMTP.

if ($mail->send()) {
    $response = $mail->getSMTPInstance()->getLastResponse();
    if (preg_match('/^250/', $response)) {
        echo 'Email has been sent.';
    } else {
        echo 'Email could not be sent. Response: ' . $response;
    }
} else {
    echo 'Email could not be sent. Error: ', $mail->ErrorInfo;
}

Selepas menghantar e-mel, kod ini mendapat respons daripada pelayan SMTP melalui kaedah getSMTPInstance() dan menggunakan ungkapan biasa untuk menentukan sama ada respons bermula dengan 250 . Jika ya, Ini bermakna e-mel telah berjaya dihantar. getSMTPInstance()方法获取SMTP服务器的响应,并使用正则表达式判断响应是否以250开头,如果是则表示邮件发送成功。

三、邮件投递状态反馈

除了通过SMTP服务器的响应判断邮件是否发送成功外,我们还可以通过邮件投递状态反馈来获取更详细的信息。在PHP中,可以使用回执邮件的方式来实现。

$mail->addCustomHeader('Return-Receipt-To: your-email@example.com');
$mail->addCustomHeader('Disposition-Notification-To: your-email@example.com');

if ($mail->send()) {
    echo 'Email has been sent.';
} else {
    echo 'Email could not be sent.';
}

这段代码在发送邮件之前,通过addCustomHeader()

3. Maklum balas status penghantaran e-mel

Selain menilai sama ada e-mel berjaya dihantar melalui respons pelayan SMTP, kami juga boleh mendapatkan maklumat yang lebih terperinci melalui maklum balas status penghantaran e-mel. Dalam PHP, ini boleh dicapai menggunakan e-mel resit pulangan.

rrreee

Kod ini menambah maklumat tentang e-mel resit pemulangan melalui kaedah addCustomHeader() sebelum menghantar e-mel. Apabila penerima membuka e-mel dan mengesahkan membaca, kami akan menerima e-mel resit yang melaluinya kami boleh mengesahkan sama ada e-mel tersebut telah diterima dan dibaca.

Ringkasan: 🎜🎜Melalui kaedah di atas, kita boleh menentukan sama ada e-mel tersebut telah berjaya dihantar. Dalam pembangunan sebenar, kami boleh memilih kaedah yang sesuai untuk pengesanan e-mel berdasarkan keperluan yang berbeza untuk memastikan kebolehpercayaan dan ketepatan masa e-mel. 🎜🎜 (Nota: Alamat e-mel dan kata laluan dalam contoh di atas hendaklah digantikan dengan alamat e-mel dan kata laluan sebenar anda, dan pastikan pelayan SMTP dikonfigurasikan dengan betul.) 🎜

Atas ialah kandungan terperinci Pengesanan e-mel PHP: Tentukan sama ada e-mel telah berjaya dihantar.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn