2009-09-14 10 views
0

J'envoie un email en utilisant PHP mail() et je peux recevoir et ouvrir la pièce jointe (dans ce cas un pdf) avec succès dans presque tous les programmes auxquels j'ai accès. Sauf dans mac mail où l'on me dit que le fichier est corrompu. Est-ce que quelqu'un d'autre a déjà rencontré ce problème? Voici le script que je me sers:PHP mail() pièce jointe ne s'ouvre pas dans Mac mail

//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Email with Attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \n 
$mime_boundary = "<<<--==+X[".md5(time())."]"; 

$path = $_SERVER['DOCUMENT_ROOT'].'/two/php/'; 
$fileContent = chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf'))); 


$headers .= "From: [email protected] <[email protected]>"."\n"; 

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

$message = "This is a multi-part message in MIME format.\n"; 

$message .= "\n"; 
$message .= "--".$mime_boundary."\n"; 

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
$message .= "Content-Transfer-Encoding: base64\n"; 
$message .= "\n"; 
$message .= "Email content and what not: \n"; 
$message .= "This is the file you asked for! \n"; 
$message .= "--".$mime_boundary."" . "\n"; 

$message .= "Content-Type: application/octet-stream;\n"; 
$message .= " name=\"CTF-brochure.pdf\"" . "\n"; 
$message .= "Content-Transfer-Encoding: base64 \n"; 
$message .= "Content-Disposition: attachment;\n"; 
$message .= " filename=\"CTF_brochure.pdf\"\n"; 
$message .= "\n"; 
$message .= $fileContent; 
$message .= "\n"; 
$message .= "--".$mime_boundary."--\n"; 

//send the email 
$mail_sent = mail($to, $subject, $message, $headers); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 

Merci à l'avance!

+0

Je remarque que vous séparez maintenant vos en-têtes d'e-mails et de mimes avec un simple "\ n", ce qui était différent dans votre dernière question. Avez-vous essayé de faire un "\ n" unique pour les en-têtes d'email mais "\ r \ n" pour les en-têtes mime? – Inshallah

+0

merci pour la suggestion, mais il casse juste si je fais cela. – Drew

Répondre

-1

Je n'ai aucune idée de ce qui se passe là-bas, mais je suis toujours surpris par le nombre de personnes qui essaient de lancer leur propre code de construction de courrier.

Avez-vous envisagé d'utiliser une bibliothèque comme SwiftMailer ou PHPMailer? Dans presque toutes les situations, vous obtiendrez une meilleure mise en forme, moins de maux de tête et souvent de meilleures performances.

+0

merci pour cela, mais si j'utilise ceux-ci, je ne serai jamais apprendre à construire un meilleur. De plus, j'ai essayé plusieurs variétés différentes et aucune d'entre elles ne fonctionne sur ce serveur. – Drew

0

Pour éviter que Mail de Mac n'ouvre une pièce jointe, assurez-vous que Content-Disposition est défini sur inline.

Questions connexes