2010-10-26 34 views
2

Je cours PHP sur IIS6. J'ai PHP qui envoie avec succès une image de 1KB en pièce jointe sur un email. Lorsque j'essaie de joindre un PDF de 500 Ko (ayant changé le type de contenu), il se bloque et après quelques minutes, le processus "FastCGI dépasse le délai de requête configuré" (numéro d'erreur 258 (0x80070102)).Y at-il une taille de fichier raisonnable maximale à attacher à un e-mail MIME avec PHP?

Avez-vous réfléchi à la raison pour laquelle le PDF est si long à joindre? La solution n'est pas d'augmenter la limite de délai, je ne peux pas avoir les utilisateurs assis là pendant 3+ minutes pendant que le fichier est envoyé.

J'ai inclus mon code ci-dessous:

$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); 

Merci à l'avance pour tout conseil.

+0

Et vous êtes sûr que ce n'est pas la génération actuelle du PDF qui fait que le script expire? – Repox

+1

cela ne ressemble pas à la taille de la pièce jointe a quelque chose à voir avec elle. taille des pièces jointes dépend des paramètres du serveur de messagerie et sont généralement au moins 2mb –

+0

Salut, je ne génère pas le fichier PDF, je joins des fichiers PDF à partir du système de fichiers. J'ai essayé d'attacher un PDF 60KB et 1KB PNG et cela a pris 24 secondes. Si j'ajoute le PDF de 570 Ko, le délai expire. – Iain

Répondre

2

Placez la pièce jointe dans le paramètre message de la fonction mail() au lieu du paramètre d'en-têtes supplémentaires.

J'ai rencontré le même problème aujourd'hui et j'ai constaté que je ne pouvais pas soumettre de gros fichiers dans le cadre du paramètre headers de la fonction mail().

par exemple.

$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);