我有一个从 mysql 数据库生成 excel 文件并下载文件的代码。下载文件后,我想在我的电子邮件中发送该文件。我正在使用 PHPMailer 库来执行此操作。我单独测试了 PHPMailer 模块,它的工作正常,邮件正在发送,但是当我将该模块与我现有的代码附加在一起时,excel 文件正在下载它没有按预期工作。它给我错误“无法访问该站点”。如果我从我的代码中删除附件行,它工作正常。下载文件并发送邮件。但我希望该文件附加在我的电子邮件中。这是我正在使用的代码
<?php
require("PHPMailer/src/SMTP.php");
require("PHPMailer/src/PHPMailer.php");
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
$conn = new mysqli('localhost', 'root', 'root');
mysqli_select_db($conn, 'dailyplay');
$setSql = "SELECT id, name, description FROM genres";
$setRec = mysqli_query($conn, $setSql);
$columnHeader = "ID"."\t"."Name"."\t"."Description";
$setData = '';
while ($rec = mysqli_fetch_row($setRec)) {
$rowData = '';
foreach ($rec as $value) {
$value = '"' . $value . '"' . "\t";
$rowData .= $value;
}
$setData .= trim($rowData) . "\n";
}
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=INTRANSIT_Report.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo ucwords($columnHeader) . "\n" . $setData . "\n";
sleep(5);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_OFF;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'USERNAME_HERE';
$mail->Password = 'PASSWORD_HERE';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
//Recipients
$mail->setFrom('EMAIL_HERE', 'USERNAME_HERE');
$mail->addAddress('RESIPIENT_HERE', 'USERNAME_HERE');
$mail->addAttachment('/home/winningcodie/Downloads/INTRANSIT_Report.xls', 'Report.xls');
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>
其余代码工作正常。该文件以excel格式下载。如果我取消注释邮件附件行,它会给我错误“无法访问该站点”。
您动态生成文件并将其发送到浏览器,浏览器将其保存在同一个磁盘上,而脚本尝试将文件作为同一进程的一部分读取 - 恐怕它不起作用(正如您所看到的它没有)。
不要立即将文件发送到浏览器。首先将其保存在磁盘上,然后在电子邮件发送过程中读取它,然后将其返回到浏览器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句