Создание файла Excel с последующей отправкой в ​​виде вложения с помощью phpmailer

Я просмотрел несколько документов по этому вопросу и применил эти шаги, но пока напрасно. Я написал код для файла 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";
}

Пожалуйста, направьте меня в правильном направлении. Большое спасибо

Я объяснил это с помощью файла xlsx и SwiftMailer в Ответ

tCot 07.05.2020 16:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
2 879
1

Ответы 1

Это проблема с буферизацией вывода, а не с электронной почтой. Вы делаете это:

$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 был неправильным.

Dev 05.09.2018 16:04

вы должны добавить ob_end_clean(), чтобы получить чистый вывод php-скрипта и не получить xls

Blaztix 16.04.2019 07:23

Другие вопросы по теме