2010-10-26 52 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); 
相关问题