Если вы используете фреймворк, такой как Zend, вы можете довольно легко прикрепить часть mime к электронному письму без необходимости сначала сохранять его на диск. В этом примере здесь используется file_get_contents()
для чтения содержимого PDF, но если у вас уже есть данные в виде строки, просто игнорируйте эту часть:
Добавление вложения в формате PDF при использовании Zend_Mail
Edit:
@ 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);