2012-08-09 63 views
0

可能重複:
Generate and email excel file as an attachment - Error message: unable to read file生成和發送的Excel通過郵件文件

我想生成excel文件,並通過電子郵件發送。

這是我的代碼。該文件已成功生成,但電子郵件包含大小爲0k的文件。當我打開它,它會顯示無法讀取文件

//to generate EXCEL files: 

require_once('documentation/Excel_Writer/Writer.php'); 

if($_POST['submit'] == "Email as EXCEL"){ 

// get values 

    $dated1=$res_hist[0]['dated']; 
    $subject1=$res_hist[0]['businesscategory']; 
    $hisstartdate=$dateto; 
    $hisenddate=$datefrom; 

//format of date// 
    $date = $hisstartdate; 
       $history= date( "j F Y", strtotime($date)); 
       $date1 = $hisenddate; 
       $history1= date( "j F Y", strtotime($date1)); 
    //print_r($date);die;   

    //$path="businesshistoryxls/"; 

     $workbook = new Spreadsheet_Excel_Writer(); 
     //print_r($workbook);die; 
     $format_bold =& $workbook->addFormat(); 
     $format_normal =& $workbook->addFormat(); 
     $format_bold->setBold(1); 
     $format_normal->setBold(0); 
     $worksheet =& $workbook->addWorksheet(); 

     $worksheet->write(0, 0, "TransactionID", $format_bold); 
     $worksheet->write(0, 1, "Date", $format_bold); 
     $worksheet->write(0, 2, "Type", $format_bold); 
     $worksheet->write(0, 3, "Transaction Details", $format_bold); 
     $worksheet->write(0, 4, "Currency", $format_bold); 
     $worksheet->write(0, 5, "Amount", $format_bold); 
     $worksheet->write(0, 6, "Balance", $format_bold); 

     $sqlza = "Select * from BUSINESSTRANSACTION where isACTIVE=1 and BusinessID=".$_SESSION['businessID']." order by dated DESC";  
     $resza = getXbyY($sqlza, "array"); 
     $rowsza = count($resza); 
     // print_r($resza);die; 
     if($rowsza>0) 
     { 
     for($i=0;$i<$rowsza;$i++) 
      { 
       $worksheet->write($i+1, 0, $resza[$i]['transactionID'], $format_bold); 
       $worksheet->write($i+1, 1, $resza[$i]['dated'], $format_bold); 
       $worksheet->write($i+1, 2, $resza[$i]['transactionTYPE'], $format_bold); 
       $worksheet->write($i+1, 3, $resza[$i]['transactionDETAILS'], $format_bold); 
       $worksheet->write($i+1, 4, $resza[$i]['currency'], $format_bold); 
       $worksheet->write($i+1, 5, $resza[$i]['amount'], $format_bold); 
       $worksheet->write($i+1, 6, $resza[$i]['balance'], $format_bold); 

      } 
     }  
    $type=".xls"; 
    $xlsname=$path.''.$hisstartdate.''.to.''.$hisenddate.''.$type; 
$workbook->send($xlsname); 
    //$worksheet->Output($xlsname, 'F'); 
$email_to = $res_pers[0]['email']; 
//print_r($xlsname);die; 
$email_from="[email protected]"; 
$email_subject = "Transactions's History"; 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers.= 'From:'.$email_from."\r\n"; 
$email_message="Dear ".$username."<br><br>"; 
$email_message.="Please check the attachment.<br>"; 
$email_message .="<br/>"; 
$email_message .=""; 
$my_path =$_SERVER['DOCUMENT_ROOT']."/".$xlsname; 
//print_r($my_path);die; 
mail_attachment($email_from, $email_to, $email_subject, $email_message ,$my_path); 
//print_r($mail_attachment);die; 
unlink($xlsname); 
$msgID=67; 
     $workbook->close(); 
unset($_SESSION['Historyb']); 
} 

mail_attachment功能的消息:

function mail_attachment($from , $to, $subject, $message, $attachment){ 

$fileatt = $attachment; // Path to the file     
$fileatt_type = "application"; // File Type 
$start= strrpos($attachment, '/') == -1 ? strrpos($attachment, '//') : strrpos($attachment, '/')+1; 
$fileatt_name = substr($attachment, $start, strlen($attachment)); // Filename that will be used for the file as the  attachment 

$email_from = $from; // Who the email is from 
$email_subject = $subject; // The Subject of the email 
$email_txt = $message; // Message that the email has in it 

$email_to = $to; // Who the email is to 

$headers = "From: ".$email_from; 
//$headers .= "\nCc: [email protected]"; 
//$headers .= "\nCc: ".$o3->email; 
$file = fopen($fileatt,'rb'); 
$data = fread($file,filesize($fileatt)); 
fclose($file); 
$msg_txt=""; 

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

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

$email_txt .= $msg_txt; 

$email_message .= "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type:text/html; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
$email_txt . "\n\n"; 

$data = chunk_split(base64_encode($data)); 

$email_message .= "--{$mime_boundary}\n" . 
       "Content-Type: {$fileatt_type};\n" . 
       " name=\"{$fileatt_name}\"\n" . 
       //"Content-Disposition: attachment;\n" . 
       //" filename=\"{$fileatt_name}\"\n" . 
       "Content-Transfer-Encoding: base64\n\n" . 
      $data . "\n\n" . 
       "--{$mime_boundary}--\n"; 


$ok = @mail($email_to, $email_subject, $email_message, $headers); 

if($ok) { 

} else { 
    die("Sorry but the email could not be sent. Please go back and try again!"); 
} 
} 
+0

什麼是'mail_attachment'功能? – galymzhan 2012-08-09 05:15:26

+0

現在我有提到我mail_attachment功能......如果你有一個答案 – Nav 2012-08-09 05:45:32

+0

任何理由不使用CSV文件請回復,其更爲普遍 – 2012-08-09 05:59:58

回答

0

的代碼尋找Spreadsheet_Excel_Writer::close(),它看起來像它做一些最後的寫入。嘗試mail_attachment之前調用$workbook->close()

+0

我試過,但它亙古不變的工作 – Nav 2012-08-09 05:47:20