溫馨提示×

PHP郵件發(fā)送能否記錄日志

PHP
小樊
83
2024-10-30 22:53:44
欄目: 編程語言

是的,PHP郵件發(fā)送可以記錄日志。為了實現(xiàn)這個功能,你可以創(chuàng)建一個日志文件,然后在發(fā)送郵件的過程中將相關(guān)信息寫入該文件。以下是一個簡單的示例:

  1. 首先,創(chuàng)建一個名為email_logs.log的日志文件,并確保它具有寫入權(quán)限:
touch email_logs.log
chmod 644 email_logs.log
  1. 創(chuàng)建一個PHP腳本(例如send_email.php),并在其中編寫以下代碼:
<?php
// 郵件發(fā)送函數(shù)
function send_email($to, $subject, $message) {
    // 郵件服務(wù)器配置
    $smtp_host = 'smtp.example.com';
    $smtp_port = 587;
    $smtp_username = 'your_email@example.com';
    $smtp_password = 'your_email_password';
    $from = 'your_email@example.com';

    // 創(chuàng)建PDO實例
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=mydb', $smtp_username, $smtp_password);
    } catch (PDOException $e) {
        error_log($e->getMessage());
        return false;
    }

    // 準(zhǔn)備郵件數(shù)據(jù)
    $stmt = $pdo->prepare("INSERT INTO emails (to, subject, message, sent_at) VALUES (?, ?, ?, NOW())");
    $stmt->execute([$to, $subject, $message]);

    // 發(fā)送郵件(這里使用PHPMailer庫作為示例)
    require 'vendor/autoload.php';
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    try {
        $mail = new PHPMailer(true);
        $mail->SMTPDebug = 0;
        $mail->isSMTP();
        $mail->Host       = $smtp_host;
        $mail->SMTPAuth   = true;
        $mail->Username   = $smtp_username;
        $mail->Password   = $smtp_password;
        $mail->SMTPSecure = 'tls';
        $mail->Port       = $smtp_port;
        $mail->setFrom($from, 'Mailer');
        $mail->addAddress($to);
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $message;
        $mail->send();
        return true;
    } catch (Exception $e) {
        error_log($e->getMessage());
        return false;
    }
}

// 發(fā)送郵件并記錄日志
$to = 'recipient@example.com';
$subject = 'Test Email';
$message = '<h1>Hello, World!</h1><p>This is a test email sent from PHP.</p>';

if (send_email($to, $subject, $message)) {
    echo 'Email sent successfully.';
} else {
    echo 'Failed to send email.';
}
?>

在這個示例中,我們創(chuàng)建了一個名為send_email的函數(shù),該函數(shù)負(fù)責(zé)發(fā)送郵件并將相關(guān)信息(如收件人、發(fā)件人、主題和發(fā)送時間)插入到數(shù)據(jù)庫中。同時,我們使用PHPMailer庫發(fā)送郵件。

當(dāng)發(fā)送郵件時,如果發(fā)生錯誤(如SMTP連接失敗、郵件格式錯誤等),我們將錯誤信息記錄到email_logs.log文件中。這樣,你就可以查看日志文件以獲取有關(guān)郵件發(fā)送的詳細(xì)信息。

0