我尝试构建一些工资单系统,仅使用“保存”按钮就可以将pdf文件的工资单文档发送给指定的人,我使用fpdf生成pdf,如何在生成该pdf文件的同时不先将其保存到网络服务器就发送该pdf文件?还是我应该先保存然后再发送?
答案 0 :(得分:-1)
如果您使用的是Zend之类的框架,则可以很容易地将mime部分附加到电子邮件上,而不必先将其保存到磁盘上。此示例在这里使用file_get_contents()
来读取PDF的内容,但是如果您已经将数据作为字符串,则可以忽略该部分:
Adding an PDF attachment when using Zend_Mail
编辑:
@catcon我假设OP使用的是-SOME-之类的框架...但是他没有指定,也没有返回来说明。另外,您对使用邮件服务发送文件的评论并没有真正回答问题。他想知道他是否可以在不先将文件内容保存到电子邮件的情况下将其附加到电子邮件上-我的回答是:“是的,可以。而且,如果使用的是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);