是的,PHP邮件发送可以记录日志。为了实现这个功能,你可以创建一个日志文件,然后在发送邮件的过程中将相关信息写入该文件。以下是一个简单的示例:
email_logs.log
的日志文件,并确保它具有写入权限:touch email_logs.log
chmod 644 email_logs.log
send_email.php
),并在其中编写以下代码:<?php
// 邮件发送函数
function send_email($to, $subject, $message) {
// 邮件服务器配置
$smtp_host = 'smtp.example.com';
$smtp_port = 587;
$smtp_username = 'your_email@example.com';
$smtp_password = 'your_email_password';
$from = 'your_email@example.com';
// 创建PDO实例
try {
$pdo = new PDO('mysql:host=localhost;dbname=mydb', $smtp_username, $smtp_password);
} catch (PDOException $e) {
error_log($e->getMessage());
return false;
}
// 准备邮件数据
$stmt = $pdo->prepare("INSERT INTO emails (to, subject, message, sent_at) VALUES (?, ?, ?, NOW())");
$stmt->execute([$to, $subject, $message]);
// 发送邮件(这里使用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;
}
}
// 发送邮件并记录日志
$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.';
}
?>
在这个示例中,我们创建了一个名为send_email
的函数,该函数负责发送邮件并将相关信息(如收件人、发件人、主题和发送时间)插入到数据库中。同时,我们使用PHPMailer库发送邮件。
当发送邮件时,如果发生错误(如SMTP连接失败、邮件格式错误等),我们将错误信息记录到email_logs.log
文件中。这样,你就可以查看日志文件以获取有关邮件发送的详细信息。