从php生成的电子邮件pdf附件

kmynzznz  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(348)

我试图建立一些工资系统,可以发送一个pdf文件工资单文件到指定的人只使用保存按钮,我使用fpdf生成pdf,我如何发送这个pdf文件,而我生成它不保存到webserver?或者我应该先保存然后再发送?

fzsnzjdm

fzsnzjdm1#

如果您使用的是像zend这样的框架,那么就可以很容易地将mime部分附加到电子邮件中,而不必首先将其保存到磁盘。这里的示例使用 file_get_contents() 要读取pdf的内容,但如果您已经将数据作为字符串,请忽略该部分:在使用zend\u mail时添加pdf附件
编辑:
@catcon我假设op正在使用某种框架…但他没有具体说明,也没有回来澄清。另外,你关于使用邮件服务发送文件的评论并不能真正回答这个问题。他想知道他是否可以将文件内容附加到电子邮件中,而不必先将其保存到磁盘—我的回答是:“是的—你可以。如果你使用的是zend这样的框架,那就更简单了。”
如果他不使用框架,只使用纯php mail() ,他仍然可以建立一个 Content-Type: multipart/mixed 通过设置适当的邮件头来发送邮件,并且发送邮件时不必首先将pdf文件保存到磁盘。例子:
假设$content是表示pdf的二进制字符串:

// base64 encode our content and split/newline every 76 chars
$encoded_content = chunk_split(base64_encode($content)); 

// Create a random boundary for content parts in our MIME message 
$boundary = md5("whatever"); 

// Set message headers header to indicate mixed type and define the boundary string
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "From:".$from."\r\n"; // Sender's email 
$headers .= "Reply-To: ".$reply_to."\r\n"; // reply email
$headers .= "Content-Type: multipart/mixed;\r\n"; // Content-Type indicating mixed message w/ attachment
$headers .= "boundary = $boundary\r\n"; // boundary between message parts

// Text of the email message  
$body = "--$boundary\r\n"; 
$body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; 
$body .= "Content-Transfer-Encoding: base64\r\n\r\n";  
$body .= chunk_split(base64_encode($message));  

// PDF attachment 
$body .= "--$boundary\r\n"; 
$body .="Content-Type: application/pdf; name=yourbill.pdf\r\n"; 
$body .="Content-Disposition: attachment; filename=yourbill.pdf\r\n"; 
$body .="Content-Transfer-Encoding: base64\r\n"; 
$body .="X-Attachment-Id: somerandomstring\r\n\r\n";  
$body .= $encoded_content; // Attaching the encoded file with email 

// Send the message w/ attachment content
$result = mail($recipient, $subject, $body, $headers);

相关问题