J'ai eu du mal à essayer d'envoyer un e-mail avec une pièce jointe en utilisant PHP. Cela fonctionnait mais le corps du message était brouillé. Maintenant j'ai le corps du message au travail mais l'attachement corrompt. J'avais l'habitude d'utiliser l'encodage base64 pour le corps du message mais maintenant j'utilise 7bit. Quelqu'un peut-il me dire ce que je fais mal? PS ne me dites pas que je devrais utiliser une classe pré-faite pour le faire. J'ai essayé plusieurs et ils ont tous échoué à travailler. Si je ne surmonte pas ces problèmes, je n'apprendrai jamais comment le faire correctement. MerciPHP mail() pièce jointe est corrompu
//define the receiver of the email
$to = '[email protected]';
//define the subject of the email
$subject = 'Your Disneyland Paris entry';
//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: 7bit\n";
$message .= "\n";
$message .= "messagebody \n";
$message .= "--".$mime_boundary."" . "\n";
$message .= "Content-Type: application/octet-stream;\n";
$message .= " name=\"CTF-brochure.pdf\"" . "\n";
$message .= "Content-Transfer-Encoding: 7bit \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";
Il est compréhensible que vous souhaitiez le faire par vous-même, mais vous n'allez pas apprendre beaucoup, en plus de simplement comprendre exactement comment encoder correctement un courrier ... :) Si je devais apprendre quelque chose, je déménagerais sur les parties intéressantes de mon projet, sans réinventer la roue ... – Palantir
merci pour le conseil. c'est la seule partie du projet qui reste à régler. :) – Drew