Voici un programme de test qui marche bien :
<?
//attachements (nom et type MIME)
$attach[0]=array ('nom'=>"doc1.txt", 'type'=>"text");
$attach[1]=array ('nom'=>"doc1.doc", 'type'=>"msword");
$attach[2]=array ('nom'=>"doc1.zip", 'type'=>"octetstream");
//Le message
$msg= "<b>Salut, je vous envoi une raffale de fichiers pour tester<br>Pas de panique! ";
//destinataire
$adresse = "[email protected]";
//L'objet
$objet = "Test de plusieurs attachements";
//Les entêtes
$headers = "From: Votre Nom <[email protected]>\n";
$headers .= "Content-type: multipart/mixed; ";
$headers .= "boundary=\"Message-Boundary\"\n";
$headers .= "Content-transfer-encoding: 7BIT\n";
//Cette partie doit se répéter une fois dans le message
$body_top = "--Message-Boundary\n";
$body_top .= "Content-type: text/html; charset=US-ASCII\n";
$body_top .= "Content-transfer-encoding: 64BIT\n";
$body_top .= "Content-description: Mail message body\n\n";
//sans oublier le message
$body_top .= stripslashes($msg);
$msg_attach = "";
//Tes attachements
for($i=0;$i<3;$i++)
{
if ($attach[$i]!= null) {
//ok, cette partie se répéte et se cumule dans une variable $msg_attach
//tanqu'il y a des attachements dans le tableau $attach
$nom = $attach[$i]["nom"];
$type = $attach[$i]["type"];
$msg_attach .= "\n--Message-Boundary\r\n";
//Référence au fichier à attacher et son type MIME
$msg_attach .= "Content-type: application/$type; name=\"$nom\"\r\n";
$msg_attach .= "Content-Transfer-Encoding: BASE64\r\n";
$msg_attach .= "Content-disposition: attachment\n\n";
//Importation du contenu binaire du fichier à attacher (voir fonction)
$msg_attach .= getContent($nom)."\n\n";
}
}
//Attendre la fin de la boucle pour assembler les attachement et le message
$mail = $body_top.$msg_attach ;
if (mail ($adresse,stripslashes($objet),$mail,$headers))
echo "<center><font color=green>Mail envoyé</font></center>";
else
echo "<center><font color=red>Mail non envoyé</font></center>";
//Fonction d'importation du contenu du fichier à attacher
function getContent($file) {
//Lecture du fichier en mode binaire
$f = fopen( $file, "rb" );
$contenu = fread( $f, filesize( $file ) );
fclose( $f );
//retourner le contenu lues en codage 64 bits
return chunk_split(base64_encode($contenu));
}
?>
Voici un programme de test qui marche bien :
[php]<?
//attachements (nom et type MIME)
$attach[0]=array ('nom'=>"doc1.txt", 'type'=>"text");
$attach[1]=array ('nom'=>"doc1.doc", 'type'=>"msword");
$attach[2]=array ('nom'=>"doc1.zip", 'type'=>"octetstream");
//Le message
$msg= "<b>Salut, je vous envoi une raffale de fichiers pour tester<br>Pas de panique! ";
//destinataire
$adresse = "
[email protected]";
//L'objet
$objet = "Test de plusieurs attachements";
//Les entêtes
$headers = "From: Votre Nom <
[email protected]>\n";
$headers .= "Content-type: multipart/mixed; ";
$headers .= "boundary=\"Message-Boundary\"\n";
$headers .= "Content-transfer-encoding: 7BIT\n";
//Cette partie doit se répéter une fois dans le message
$body_top = "--Message-Boundary\n";
$body_top .= "Content-type: text/html; charset=US-ASCII\n";
$body_top .= "Content-transfer-encoding: 64BIT\n";
$body_top .= "Content-description: Mail message body\n\n";
//sans oublier le message
$body_top .= stripslashes($msg);
$msg_attach = "";
//Tes attachements
for($i=0;$i<3;$i++)
{
if ($attach[$i]!= null) {
//ok, cette partie se répéte et se cumule dans une variable $msg_attach
//tanqu'il y a des attachements dans le tableau $attach
$nom = $attach[$i]["nom"];
$type = $attach[$i]["type"];
$msg_attach .= "\n--Message-Boundary\r\n";
//Référence au fichier à attacher et son type MIME
$msg_attach .= "Content-type: application/$type; name=\"$nom\"\r\n";
$msg_attach .= "Content-Transfer-Encoding: BASE64\r\n";
$msg_attach .= "Content-disposition: attachment\n\n";
//Importation du contenu binaire du fichier à attacher (voir fonction)
$msg_attach .= getContent($nom)."\n\n";
}
}
//Attendre la fin de la boucle pour assembler les attachement et le message
$mail = $body_top.$msg_attach ;
if (mail ($adresse,stripslashes($objet),$mail,$headers))
echo "<center><font color=green>Mail envoyé</font></center>";
else
echo "<center><font color=red>Mail non envoyé</font></center>";
//Fonction d'importation du contenu du fichier à attacher
function getContent($file) {
//Lecture du fichier en mode binaire
$f = fopen( $file, "rb" );
$contenu = fread( $f, filesize( $file ) );
fclose( $f );
//retourner le contenu lues en codage 64 bits
return chunk_split(base64_encode($contenu));
}
?> [/php]