Php 来自字符串的附件
Php attachment from string
我有一个生成 .pdf 文件的脚本。这个脚本 return 这个文件作为字符串然后我可以用 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');
这个字符串 return 是一个错误:
PHP Fatal error: Call to a member function addAttachment() on a non-object
如何在不保存的情况下将字符串类型转换为文件类型?
更新:
完整代码
$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';
}
你不能把文件保存到一个临时目录然后从那里附加它吗?并添加一些代码,一旦 PHPMailer->send()
returns TRUE 就删除临时文件。
查看 PHPMailer class 并查看它对 addAttachment 方法进行的检查。
此外,该错误实际上看起来像是您的 PHPMailer 对象未启动。你能 post 你的整个 PHPMailer 代码块吗?
有一种 addStringAttachment()
方法似乎符合您的需要:
addStringAttachment()
addStringAttachment(string $string, string $filename, string $encoding = self::ENCODING_BASE64, string $type = '', string $disposition = 'attachment') : boolean
Add a string or binary attachment (non-filesystem).
This method can be used to attach ascii or binary data, such as a BLOB record from a database.
这很简单:只需调用 addStringAttachment
而不是 addAttachment
:
$mail->addStringAttachment($dompdf->output(), 'my.pdf');
我有一个生成 .pdf 文件的脚本。这个脚本 return 这个文件作为字符串然后我可以用 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');
这个字符串 return 是一个错误:
PHP Fatal error: Call to a member function addAttachment() on a non-object
如何在不保存的情况下将字符串类型转换为文件类型?
更新: 完整代码
$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';
}
你不能把文件保存到一个临时目录然后从那里附加它吗?并添加一些代码,一旦 PHPMailer->send()
returns TRUE 就删除临时文件。
查看 PHPMailer class 并查看它对 addAttachment 方法进行的检查。
此外,该错误实际上看起来像是您的 PHPMailer 对象未启动。你能 post 你的整个 PHPMailer 代码块吗?
有一种 addStringAttachment()
方法似乎符合您的需要:
addStringAttachment()
addStringAttachment(string $string, string $filename, string $encoding = self::ENCODING_BASE64, string $type = '', string $disposition = 'attachment') : boolean
Add a string or binary attachment (non-filesystem).
This method can be used to attach ascii or binary data, such as a BLOB record from a database.
这很简单:只需调用 addStringAttachment
而不是 addAttachment
:
$mail->addStringAttachment($dompdf->output(), 'my.pdf');