2013-03-26 1 views
0

Я хочу отправить pdf-файл, созданный с помощью TCPDF, используя функцию электронной почты Php.Присоединить pdf-файл, созданный с помощью TCPDF, отправляющего почту с почтой Функция PHP

Если я отправляю простую почту, как это работает: mail ('[email protected] ',' My Subject ', $ message);

pdf создается хорошо, но когда я хочу, чтобы вложение pdf в заголовке не работало.

Это мой код:

$pdfdoc=$pdf->Output('file.pdf', 'S'); 

$separator = md5(time()); 

     $eol = PHP_EOL; 
// Send 
     $filename = "_Desiredfilename.pdf"; 

     // encode data (puts attachment in proper format) 

     $attachment = chunk_split(base64_encode($pdfdoc)); 

     ///////////HEADERS INFORMATION//////////// 
     // main header (multipart mandatory) message 
     $headers = "From: Sender_Name<[email protected]>".$eol; 
     $headers .= "Bcc: [email protected]".$eol; 
     $headers .= "MIME-Version: 1.0".$eol; 
     $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
     $headers .= "Content-Transfer-Encoding: 7bit".$eol; 
     $headers .= "This is a MIME encoded message.".$eol.$eol; 

     // message 
     $headers .= "--".$separator.$eol; 
     $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol; 
     $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
     $headers .= $message.$eol.$eol; 

     // attachment 
     $headers .= "--".$separator.$eol; 
     $headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
     $headers .= "Content-Transfer-Encoding: base64".$eol; 
     $headers .= "Content-Disposition: attachment".$eol.$eol; 
     $headers .= $attachment.$eol.$eol; 
     $headers .= "--".$separator."--"; 


     //Email message 
     mail('[email protected]', 'prova', 'hola', $headers); 

Когда проблема?

Благодаря

С уважением

+0

Что ваша ошибка? Что вы пробовали? – Eernie

+0

Проблема в том, что почта no отправляется. –

+0

Может быть проблема в конфигурации php.ini? –

ответ

1

Я надеюсь, что это будет работать для вас тоже. Я проверил и его работы хорошо. пожалуйста, попробуйте. Перед этим, пожалуйста, проверьте «php.ini» на почту и проверьте, был ли файл pdf создан или нет.

$pdfdoc=$pdf->Output('file.pdf', 'F'); 

     // Send 
     $files = "file.pdf"; 



     ///////////HEADERS INFORMATION//////////// 
     // boundary 
     $semi_rand = md5(time()); 
     $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

     // headers for attachment 
     $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

     // multipart boundary 
     $message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
     "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 

     // preparing attachments 
     $message .= "--{$mime_boundary}\n"; 
      $fp  = @fopen($files,"rb"); 
      $data = @fread($fp,filesize($files)); 
        @fclose($fp); 
      $data = chunk_split(base64_encode($data)); 
      $message .= "Content-Type: application/octet-stream; name=\"".basename($files)."\"\n" . 
      "Content-Description: ".basename($files)."\n" . 
      "Content-Disposition: attachment;\n" . " filename=\"".basename($files)."\"; size=".filesize($files).";\n" . 
      "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
     $message .= "--{$mime_boundary}--"; 


     //Email message 
     mail('[email protected]', 'prova', 'hola', $headers); 

или включить эту функцию в свой код, используйте эту функцию для отправки файла с несколькими вложениями. этот работал хорошо. пожалуйста, попробуйте это.

/* 
    * Function Name: sentMail 
    * Scope  : Sent Mail Function with CC , BCC and Attachment files.. 
    * Input  : Recipient Name   => $recipientName // (Required) 
    *    Recipient MailId(Many) => $recipientMailId // (Required & Array Format) 
    *    Subject Content   => $subjectContent // (Required) 
    *    Message Content   => $messageContent // (Required) 
    *    Sender MailId    => $senderMailId // (Required) 
    *    Sender Name(Many)   => $senderName  // (Required) 
    *    Recipient CC MailId  => $recipientCCMailId //(Optional & Array Format) 
    *    Recipient BCC MailId  => $recipientBCCMailId //(Optional & Array Format) 
    *    Attachment Files   => $attachmentFiles  //(Optional & Array Format) 
    * Output  : Sent mail to the Recipient. 
    */ 
    public function sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles) 
    { 
     try 
     { 
      /*Get the Mulitple Recipient CC MailId*/ 
      if(isset($recipientCCMailId)){ 
       if(count($recipientCCMailId)>1){ 
        $recipientCCMailId = implode(',',$recipientCCMailId); 
       } 
       else{ 
        $recipientCCMailId = $recipientCCMailId[0]; 
       } 
      } 

      /*Get the Mulitple Recipient BCC MailId*/ 
      if(isset($recipientBCCMailId)){ 
       if(count($recipientBCCMailId)>1){ 
        $recipientBCCMailId = implode(',',$recipientBCCMailId); 
       } 
       else{ 
        $recipientBCCMailId = $recipientBCCMailId[0]; 
       } 
      } 

      /*** Mail Contents Starts ***/ 
       $subj = $subjectContent; 
       $msg =""; 

       /*Get the Mulitple Recipient BCC MailId*/ 
       if(count($recipientMailId)>1){ 
        $recipientMailId = implode(',',$recipientMailId); 
        $msg .="Dear, <b>All</b>\r <br>"; 
       } 
       else{ 
        $recipientMailId = $recipientMailId[0]; 
        $msg .="Dear, <b>".ucwords($user_name)."</b> \r <br>"; 
       } 
       $msg .=$messageContent."\r <br><br>"; 
       $msg .="Thank you"."\r\n\n <br>"; 
       $msg .=$senderName."\r\n\n <br><br>"; 

       $headers =""; 

       /** Get the Mulitple Attachment files and Attachment Process Starts **/ 
       if(isset($attachmentFiles)){ 
        $headers .= "From: ".$senderMailId."\r\n"; 
        $headers .= "Cc: ".$recipientCCMailId."\r\n"; 
        $headers .= "Bcc: ".$recipientBCCMailId."\r\n"; 
        // boundary 
        $semi_rand = md5(time()); 
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

        // headers for attachment 
        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
        // multipart boundary 
        $msg .= "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
        "Content-Transfer-Encoding: 7bit\n\n" . $msg . "\n\n"; 

        // preparing attachments 
        for($i=0;$i<count($attachmentFiles);$i++) 
        { 
         if(is_file($attachmentFiles[$i])) 
         { 
          $msg .= "--{$mime_boundary}\n"; 
          $fp  = @fopen($attachmentFiles[$i],"rb"); 
          $data = @fread($fp,filesize($attachmentFiles[$i])); 
             @fclose($fp); 
          $data = chunk_split(base64_encode($data)); 
          $msg .= "Content-Type: application/octet-stream; name=\"".basename($attachmentFiles[$i])."\"\n" . 
          "Content-Description: ".basename($attachmentFiles[$i])."\n" . 
          "Content-Disposition: attachment;\n" . " filename=\"".basename($attachmentFiles[$i])."\"; size=".filesize($attachmentFiles[$i]).";\n" . 
          "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
         } 
        } 
        $msg .= "--{$mime_boundary}--"; 
       } 
       /** Attachment Process Ends **/ 
       else{ 
        $headers .= "MIME-Version: 1.0" . "\r\n"; 
        $headers .= "Content-type:text/html;charset=utf-8" . "\r\n"; 
        //$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
        $headers .= "From: ".$senderMailId."\r\n"; 
        $headers .= "Cc: ".$recipientCCMailId."\r\n"; 
        $headers .= "Bcc: ".$recipientBCCMailId."\r\n"; 
       } 
      /*** Mail Contents Ends ***/  
      $sent_mail=mail($recipientMailId,$subj,$msg,$headers); 
      if($sent_mail) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     catch (Exception $e) 
     { 
      getConnection('close'); 
      echo "Caught Exception:",$e->getMessage(); 
     } 
    } 

и вы отредактировали этот параметр этим параметром в указанном формате в DTD функции.

sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles); 

здесь,

$recipientName = "sam"; 
$recipientMailId = array("[email protected]"); 
$subjectContent = "this is sample pdf attachment over email"; 
$messageContent = "this is sample pdf attachment over email"; 
$senderMailId = "[email protected]" 
$senderName  = "sender"; 
$recipientCCMailId = array("[email protected]"); 
$recipientBCCMailId = array("[email protected]"); 
$attachmentFiles = array("filename.pdf"); 

sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles); 
+0

Спасибо, я иду, чтобы доказать это. Если я сгенерирую pdf с параметром F, то файл pdf будет сохранен на сервере? Только временное? Спасибо –

+0

Я не хочу сохранять PDF в сервере, если это возможно, я хочу генерировать как String –

+0

после того, как вы успешно отправили письмо с помощью pdf. Вы удаляете этот временный файл, используя «unlink ($ files)». – MKV