электронная почта сгенерирована pdf прилагается из php - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать систему расчета заработной платы, которая может отправлять payslip-документ pdf-файла указанному лицу, используя только кнопку сохранения, я использую fpdf для генерации pdf, как я могу отправить этот pdf-файл, пока я генерирую его, не сохраняя его сначала на веб-сервере ? или, может быть, я должен сначала сохранить его, а затем отправить?

1 Ответ

0 голосов
/ 10 января 2019

Если вы используете фреймворк, такой как 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); 
...