2015-08-24 2 views
0

Добрый день! Мой код отлично работает, если формат находится в msword, но когда я изменил его на PDF, он становится поврежденным, что мне делать? Пожалуйста, помогите мне.Как отправить PDF-приложение с использованием PHP

$headers = "From:<[email protected]>"; 
    $to = '[email protected]'; 
    $subject = 'Purchase Order'; 

    $message .= 'Please see attached file'; 




     $txt .=" <html> <body> 



    <p><b> PO Number:</b> 
    $purchasenumber</p> 
    <p><b> Style Code:</b> $styleCode</p> 
    <p><b> Generic Number:</b> $gennum</p> 
    <p><b> Vendor Name:</b> $vendname</p> 
    <p><b> Planned Delivery Date:</b> 
    $pdelivdate</p> <br/> <br/> 


      <table border=1 style='width:100%' cellpadding='0'> 
         <thead> 
          <tr> 
           <th width='16.7%'>Material Number</th> 
           <th width='16.7%'>Color</th> 
           <th width='16.7%'>Size</th> 
           <th width='16.7%'>Ordered QTY</th>           
           <th width='16.7%'>Total Cost</th> 
           <th width='16.7%'>Total SRP</th>           
          </tr> 
         </thead> 

         <tbody> 



     "; 

     $statement = $db->prepare("SELECT * FROM purchaseorderproductitem where purchaseorderID = :pid"); 
      $statement->execute(array(':pid' => $purchasenumber)); 


      foreach ($statement->fetchAll() as $row) 
      { $matnum = $row['materialnumber']; $color = $row['color']; $size = $row['size']; $qty = $row['quantity']; $units = $row['units']; $curcost = $qty * $cost; $cursrp = $qty * $srp; $curcost = number_format($curcost, 2, '.', ''); $cursrp = number_format($cursrp, 2, '.', ''); 

      $txt .=" 

     <tr> <td width='16.7%'>$matnum</td> <td width='16.7%'>$color</td> <td width='16.7%'>$size</td> <td width='16.7%'>$qty $units</td> <td width='16.7%'>$curcost</td> <td width='16.7%'>$cursrp</td> </tr> 


     "; 


      } 
       $txt .=" 

     <tr> <td width='16.7%' text-align:'center'>Total</td> <td width='16.7%'>&nbsp;</td> <td width='16.7%'>&nbsp;</td> <td width='16.7%'>$totalqty pcs</td> <td width='16.7%'>$totalcost</td> <td width='16.7%'>$totalsrp </td> </tr> 

     </body> </table> </html> 
      "; 


    // Always set content-type when sending HTML email $message = "MIME-Version: 1.0" . "\r\n"; // $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; $message .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 


$fileatt_name2 = "PurchaseOrder.pdf"; 

$semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    // Add the headers for a file attachment $headers .= "\nMIME-Version: 
    1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $data2 = chunk_split(base64_encode($txt)); 


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

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

// Add file attachment to the message $message .= "--{$mime_boundary}\n" . "Content-Type: application/octet-stream;\n" . // {$fileatt_type} " name=\"{$fileatt_name2}\"\n" . "Content-Disposition: attachment;\n" . " filename=\"{$fileatt_name2}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data2 . "\n\n" . "--{$mime_boundary}--\n"; 


// Send the message $send = mail($to, $subject, $message, $headers); 

Не могли бы вы помочь мне решить эту проблему? Заранее спасибо!

ответ

2

Вы можете использовать комбинацию PHPMailer:

http://phpmailer.worxware.com/

И TCPDF:

http://www.tcpdf.org/

Для выполнения этой задачи. Я не буду описывать процессы в деталях, как примеры кода будет довольно нудно создавать однако обе части программного обеспечения имеют подробную документацию и примеры приведены здесь:

https://github.com/Synchro/PHPMailer

И здесь:

http://www.tcpdf.org/docs.php

Редактировать:

Если вы не хотите использовать что-то, что просто работает как PHPMailer, тогда я буду следить за отправкой правильных заголовков.

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

Edit:

Просто угадать здесь, но ваши последние несколько строк кода, я считаю, следует читать следующим образом:

// Add the headers for a file attachment 
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . "boundary=\"{$mime_boundary}\""; $data2 = chunk_split(base64_encode($txt)); 
$headers .= "{$mime_boundary}\n"."Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n"; 
// Add file attachment to the message 
$headers .= "--{$mime_boundary}\n" . "Content-Type: application/octet-stream;\n" . {$fileatt_type} " name=\"{$fileatt_name2}\"\n" . "Content-Disposition: attachment;\n" . " filename=\"{$fileatt_name2}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data2 . "\n\n" . "--{$mime_boundary}--\n"; 
// Send the message 
$send = mail($to, $subject, $message, $headers); 

Вы были сцеплены конец одного из заявлений вместо прекращения его с точка с запятой ;

Вы добавляли заголовки в переменную $ message, они должны быть в переменной $ headers правильной?

Вы добавили один из заголовков дважды.

+0

вы можете объяснить больше? На самом деле я не смог использовать ни один из phpmailer и tcpdf, поэтому я спрашиваю. Извините – Somi

+0

Я очень смутно помню, что у меня были проблемы с поврежденными файлами PDF, загружаемыми в определенный момент времени. Сделайте то, что я сказал, открыв файл в текстовом редакторе, он может показать ошибки, которые вы понимаете. Проблема заключалась в том, что правильные заголовки не отправлялись. Когда вы говорите, что не можете использовать phpmailer/tcpdf, в чем проблема? Они оба твердые. –

+0

Я имею в виду, что я не знаю, как их использовать. Его мой первый раз в прикреплении файла по электронной почте. Новичка вкратце. Извините – Somi

Смежные вопросы