электронная почта — Php вложение из строки

У меня есть скрипт, генерирующий файл .pdf. Этот скрипт возвращает этот файл в виде строки, а затем я могу сохранить его с помощью file_put_contents ()

$output = $dompdf->output();
file_put_contents("myfile.pdf", $output);

Я хочу добавить этот файл в качестве вложения в мою электронную почту, используя PHPMailer. Если у меня есть файл на диске, я просто пишу путь к нему и новое имя:

$mail->addAttachment('/path/to/file.pdf', 'newname.pdf');

Но можно ли добавить вложение, не сохраняя файл myfile.pdf на диск? Что-то вроде того:

$mail->addAttachment($output, 'myfile.pdf');

Эта строка возвращает ошибку:

PHP Fatal error:  Call to a member function addAttachment() on a non-object

Как я могу преобразовать строковый тип в тип файла без сохранения?

UPD:
Полный код

$output = $dompdf->output();
$name = 'title.pdf';
$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.***.org';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '***@***.orgg';                 // SMTP username
$mail->Password = '******************';                           // SMTP password
$mail->SMTPSecure = 'tls';

$mail->From = 'aaa@bbb.com';
$mail->FromName = 'John';
$mail->addAddress('peter@parker.com', 'Joe User');     // Add a recipient

$mail->addStringAttachment($output, $name);

// Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}

1

Решение

Там есть addStringAttachment() метод, который, кажется, соответствует вашим потребностям:

addStringAttachment ()

addStringAttachment(string $string, string $filename, string
$encoding, string $type, string $disposition) : void

Добавить строку или двоичное вложение (не файловая система).

Этот метод может использоваться для присоединения ascii или двоичных данных, таких как BLOB-запись из базы данных.

2

Другие решения

Разве вы не можете просто сохранить файл во временный каталог и затем прикрепить его оттуда? И добавить код, который однажды PHPMailer->send() возвращает TRUE, что вы удалили временный файл.

Посмотрите на класс PHPMailer и посмотрите, что он проверяет в методе addAttachment.

Также ошибка на самом деле выглядит так, как будто ваш объект PHPMailer не инициирован. Можете ли вы опубликовать весь свой блок кода PHPMailer, пожалуйста.

1

Это очень просто: просто позвоните addStringAttachment вместо addAttachment:

$mail->addStringAttachment($dompdf->output(), 'my.pdf');
1