字符串中的PHP附件

j91ykkif  于 2022-11-21  发布在  PHP
关注(0)|答案(3)|浏览(187)

我有一个脚本生成.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';
}
9udxz4iz

9udxz4iz1#

有一个addStringAttachment()方法似乎可以满足您的需要:

添加字符串附件()

  • 添加字符串或二进制附件(非文件系统)。*

public addStringAttachment(string $string, string $filename[, string $encoding = self::ENCODING_BASE64 ][, string $type = '' ][, string $disposition = 'attachment' ]) : bool
此方法可用于附加ASCII或二进制数据,如数据库中的BLOB记录。

axkjgtzd

axkjgtzd2#

你不能把文件保存到一个临时目录,然后从那里附加它吗?并添加一些代码,一旦PHPMailer->send()返回TRUE,你就删除临时文件。
查看PHPMailer类,看看它对addAttachment方法进行了什么检查。
另外,这个错误实际上看起来像你的PHPMailer对象没有被初始化。你能发布你的整个PHPMailer代码块吗?

bogh5gae

bogh5gae3#

这很简单:只需调用addStringAttachment而不是addAttachment

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

相关问题