2010-10-26 48 views
2

我在IIS6上運行PHP。我有一些PHP成功發送1KB圖像作爲電子郵件附件。然而,當我嘗試附加500KB PDF時(它改變了Content-Type),它會掛起,幾分鐘後我得到「FastCGI進程超出配置的請求超時」(錯誤號258(0x80070102))。是否有最大合理的文件大小附加到一個MIME電子郵件與PHP?

有關爲什麼需要這麼長時間來附加PDF的想法?解決方案是不增加超時限制,我不能讓用戶在文件發送時坐在那裏3分鐘以上。

以下附上我的代碼:您的任何意見

$headers = "From: ".$from."\r\n"; 
    $headers .= "Reply-To: ".$from."\r\n"; 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
    $headers .="This is a multipart message in MIME format. \r\n\r\n"; 

    $headers .= "--".$uid."\r\n\r\n"; 
    $headers .= "Content-Type: text/plain; charset-iso-8859-1\r\n"; 
    $headers .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n"; 
    $headers .= $text . "\r\n\r\n"; 

    $headers .= "--".$uid."\r\n\r\n"; 
    $headers .= "Content-Type: text/html; charset-iso-8859-1\r\n"; 
    $headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
    $headers .= $html . "\r\n\r\n"; 

    $headers .= "--".$uid."\r\n\r\n"; 
    $headers .= "Content-Type: image/png; name=\"".$filename."\"\r\n"; 
    $headers .= "Content-Transfer-Encoding: base64\r\n"; 
    $headers .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; 
    $attachment = chunk_split(base64_encode(file_get_contents($path.$filename))); 
    $headers .= $attachment . "\r\n\r\n"; 

    $headers .= "--".$uid."\r\n\r\n"; 

    //send the email 
    $mail_sent = @mail($to, $subject, $text, $headers); 

感謝。

+0

你確定這不是PDF的實際生成使腳本超時? – Repox 2010-10-26 10:48:29

+1

這聽起來不像附件filesize有什麼關係。附件大小取決於郵件服務器設置,通常至少2MB – 2010-10-26 11:48:16

+0

嗨,我沒有生成PDF,我從文件系統附加PDF。我試過附加60KB PDF和1KB PNG,花了24秒。如果我添加570KB PDF,它會超時。 – Iain 2010-10-27 12:13:45

回答

2

將附件放入mail()函數的消息參數中,而不是附加頭部參數。

今天我遇到了同樣的問題,發現我無法將大文件作爲mail()函數中headers參數的一部分提交。

例如

$headers = "From: ".$from."\r\n"; 
$headers .= "Reply-To: ".$from."\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
$body .="This is a multipart message in MIME format. \r\n\r\n"; 

$body .= "--".$uid."\r\n\r\n"; 
$body .= "Content-Type: text/plain; charset-iso-8859-1\r\n"; 
$body .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n"; 
$body .= $text . "\r\n\r\n"; 

$body .= "--".$uid."\r\n\r\n"; 
$body .= "Content-Type: text/html; charset-iso-8859-1\r\n"; 
$body .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
$body .= $html . "\r\n\r\n"; 

$body .= "--".$uid."\r\n\r\n"; 
$body .= "Content-Type: image/png; name=\"".$filename."\"\r\n"; 
$body .= "Content-Transfer-Encoding: base64\r\n"; 
$body .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; 
$attachment = chunk_split(base64_encode(file_get_contents($path.$filename))); 
$body .= $attachment . "\r\n\r\n"; 

$body .= "--".$uid."\r\n\r\n"; 

//send the email 
$mail_sent = @mail($to, $subject, $body, $headers); 
相關問題