Я просмотрел несколько документов по этому вопросу и применил эти шаги, но пока напрасно. Я написал код для файла excel, но хочу получить его содержимое в том же файле и использовать его как вложение файла excel с помощью функции PHPMailer.
Ниже приведен код, который я использую после создания файла Excel:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
$data = ob_get_contents();
$email->SetFrom('[email protected]', 'Talal Haider'); //Name is optional
$email->Subject = 'Test Mail';
$email->Body = 'Simple Test Email';
$email->AddAddress( '[email protected]' );
//$email->AddAddress( '[email protected]' );
$email->AddAttachment($data, 'Inspection_Report.xls' );
if ($email->Send()){
echo "Mail Sent";
} else{
echo "Mail Failed";
}
Пожалуйста, направьте меня в правильном направлении. Большое спасибо






Это проблема с буферизацией вывода, а не с электронной почтой. Вы делаете это:
$objWriter->save('php://output');
$data = ob_get_contents();
В нем говорится: «вывести сгенерированный файл Excel прямо в браузер», а затем «получить содержимое выходного буфера». Но к тому времени, когда произойдет этот второй шаг, будет уже слишком поздно, поскольку файл уже был отправлен в браузер, и поэтому вы его видите.
Если вы собираетесь использовать буферизацию вывода, вам нужно указать PHP, чтобы он начал захват вывода перед, который вы выводите. Это описано в документация PHP для этой функции - это первое место, где вы должны искать подобные вопросы. Измените свой код на этот:
ob_start();
$objWriter->save('php://output');
$data = ob_get_contents();
ob_end_clean();
Теперь, когда у вас есть данные Excel в виде строки, вы можете передать их PHPMailer. В вашем коде вы использовали для этого неправильную функцию. addAttachment ожидает, что первым параметром будет путь к файлу, как говорится в документации, но вы даете ему содержимое файла, что не сработает. Вам нужен метод addStringAttachment(), который очень похож, но ожидает двоичных данных в качестве первого параметра, например:
$email->addStringAttachment($data, 'Inspection_Report.xls');
Я также отмечу, что вы используете phpExcel, который устарел и больше не поддерживается; он был заменен на phpSpreadsheet.
Урок, который следует усвоить, заключается в том, что читать документы намного быстрее, чем писать такой вопрос и ждать, пока кто-нибудь на него ответит.
Большое вам спасибо за ваше руководство и советы. Я обязательно буду действовать в соответствии с этим с этого момента. Я использовал ob_start (), но мой метод AddAttachment был неправильным.
вы должны добавить ob_end_clean(), чтобы получить чистый вывод php-скрипта и не получить xls
Я объяснил это с помощью файла xlsx и SwiftMailer в Ответ