来自字符串的Php附件

来自字符串的Php附件,php,email,attachment,phpmailer,email-attachments,Php,Email,Attachment,Phpmailer,Email Attachments,我有一个生成.pdf文件的脚本。此脚本将此文件作为字符串返回,然后我可以将其与文件\u put\u contents()一起保存 我想使用PHPMailer将此文件作为附件添加到我的电子邮件中。如果磁盘上有文件,我只需将路径和新名称写入: $mail->addAttachment('/path/to/file.pdf', 'newname.pdf'); 但是我可以在不将myfile.pdf保存到磁盘的情况下添加附件吗?诸如此类: $mail->addAttachment($out

我有一个生成.pdf文件的脚本。此脚本将此文件作为字符串返回,然后我可以将其与文件\u put\u contents()一起保存

我想使用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';
}
$output=$dompd->output();
$name='title.pdf';
$mail->isSMTP();//将邮件程序设置为使用SMTP
$mail->SMTPDebug=2;
$mail->Host='smtp.**.org';//指定主SMTP服务器和备份SMTP服务器
$mail->SMTPAuth=true;//启用SMTP身份验证
$mail->Username='***@***.orgg';//SMTP用户名
$mail->Password='*********************';//SMTP密码
$mail->SMTPSecure='tls';
$mail->Fromaaa@bbb.com';
$mail->FromName='John';
$mail->addAddress('peter@parker.com“,”乔用户“;//添加收件人
$mail->addStringAttachment($output,$name);
//将电子邮件格式设置为HTML
$mail->Subject='主题在这里';
$mail->Body='这是以粗体显示的HTML邮件正文!';
$mail->AltBody='这是非HTML邮件客户端的纯文本正文';
如果(!$mail->send()){
echo“无法发送消息”;
回显“邮件错误:”。$mail->ErrorInfo;
}否则{
回音“消息已发送”;
}

您不能将文件保存到一个临时目录中,然后从那里附加它吗?并添加一些代码,一旦
PHPMailer->send()
返回TRUE,则删除临时文件

查看PHPMailer类,看看它对addAttachment方法做了什么检查


此外,该错误实际上看起来像PHPMailer对象未启动。您可以发布整个PHPMailer代码块吗。

您不能将文件保存到一个临时目录,然后从那里附加它吗?并添加一些代码,一旦
PHPMailer->send()
返回TRUE,则删除临时文件

查看PHPMailer类,看看它对addAttachment方法做了什么检查

此外,该错误实际上看起来像PHPMailer对象未启动。你能发布你的整个PHPMailer代码块吗?

有一种方法似乎适合你的需要:

addStringAttachment()
addStringAttachment(string$string,string$filename,string$encoding=self::encoding_BASE64,string$type='',string$disposition='attachment'):布尔值

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

此方法可用于附加ascii或二进制数据,例如数据库中的BLOB记录

有一种方法似乎适合您的需要:

addStringAttachment()
addStringAttachment(string$string,string$filename,string$encoding=self::encoding_BASE64,string$type='',string$disposition='attachment'):布尔值

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

此方法可用于附加ascii或二进制数据,例如数据库中的BLOB记录


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

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

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

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