PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » Problème d'accents sur le header d'un email avec la fonction mail() » 30-08-2010 08:50:29

Bonjour,

Après avoir essayé plusieurs scénarios infructueux, j'ai trouvé sur Wikipedia (article sur MIME) que si l'on a un message à plusieurs parties, il est normal d'avoir plusieurs "Content-type", donc plusieurs "Charset".
Dès qu'un "Charset" est dans la partie "Header", le mail n'est pas envoyé correctement. Si on l'ôte, ça fonctionne sauf le problème des accents qui sont mal interprétés. Comment faire pour terminer ce formulaire?

Salutations
C. Rossat

#2 Re : Forum Général PHP » Problème d'accents sur le header d'un email avec la fonction mail() » 30-08-2010 08:50:29

Salut,

ça n'est pas ça. Quand on ajoute le charset=\"ISO-8859-1\" pour la variable header, le problème apparaît. Nous avons re-testé, en ôtant le charset, l'email est correct. Seul le problème d'accent subsiste.

Salutations
C. Rossat

#3 Re : Forum Général PHP » Problème d'accents sur le header d'un email avec la fonction mail() » 30-08-2010 08:50:29

Hello,

Voici un bout du code qui fonctionnait bien au niveau de l'envoi avant que l'on ajoute le charset dans le content-type:


<?php
//=====Définition du sujet
$sujet = "Commande sur votre site";
$sujet1 = "Confirmation de votre commande";
//=========
 
//=====Création du header de l'e-mail
$header = "From: \"Boulangerie Pâtisserie Bessa\"<webmaster@boulangeriepatisseriebessa.ch>".$passage_ligne;
$header.= "Reply-to: \"Boulangerie Pâtisserie Bessa\" <webmaster@boulangeriepatisseriebessa.ch>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed; charset=\"iso-8859-1\"".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
 
//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
 
//=====On ferme la boundary alternative
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
 
 
 
$message.= $passage_ligne."--".$boundary.$passage_ligne;
 
//=====Ajout de la pièce jointe
$message.= "Content-Type: $type_file; name=\"$fichier\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"$fichier\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
//=====Envoi de l'e-mail
mail("test@test.ch",$sujet,$message,$header);
mail($mail,$sujet1,$message,$header);
?>

#4 Re : Forum Général PHP » Problème d'accents sur le header d'un email avec la fonction mail() » 30-08-2010 08:50:29

Bonjour,

Merci pour votre réponse, mais maintenant l'email n'est pas généré correctement sous Outlook.

Le code que j'ai mis est:

$header.= "Content-Type: multipart/mixed; charset=\"iso-8859-1\"".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

Je reçois ceci:

Confirmation de votre commande
Boulangerie Pâtisserie Bessa [webmaster@boulangeriepatisseriebessa.ch]

-------=59c2bc360c3ef3ba2ff934e56d16bbaa
Content-Type: multipart/alternative;
boundary="-----=6281fc52e26ec15a40ac13ba7159c254"

-------=6281fc52e26ec15a40ac13ba7159c254
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit



-------=6281fc52e26ec15a40ac13ba7159c254
Content-Type: text/html; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit

<html><head></head><body><b>Récapitulatif de votre commande</b><br/><br/> <table width="600" border="0" cellpadding="1" cellspacing="0" style="width: 600px;">
                                        <tbody>
                                            <tr>
                                                <td width="160" style="text-align: justify;">

                                                    Distribution</td>
                                                <td width="240" style="text-align: justify;">
                                                    asd </td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Jour / Date</td>

                                                <td style="text-align: justify;">
                                                     / </td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Kg</td>
                                                <td style="text-align: justify;">

                                                    </td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Format</td>
                                                <td style="text-align: justify;">
                                                    </td>

                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Saveur</td>
                                                <td style="text-align: justify;">
                                                    </td>
                                            </tr>

                                            <tr>
                                                <td style="text-align: justify;">
                                                    Type d'événement</td>
                                                <td style="text-align: justify;">
                                                    </td>
                                            </tr>
                                            <tr>

                                                <td style="text-align: justify;">
                                                    Age</td>
                                                <td style="text-align: justify;">
                                                    </td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Prénom *</td>

                                                <td style="text-align: justify;">
                                                    asd</td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Nom *</td>
                                                <td style="text-align: justify;">
                                                    asd</td>

                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Adresse *</td>
                                                <td style="text-align: justify;">
                                                    asd</td>
                                            </tr>
                                            <tr>

                                                <td style="text-align: justify;">
                                                    NPA / Ville *</td>
                                                <td style="text-align: justify;">
                                                    asd / asd</td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">

                                                    Email *</td>
                                                <td style="text-align: justify;">
                                                    c.rossat@gmail.com</td>
                                            </tr>
                                            <tr>
                                                <td style="text-align: justify;">
                                                    Téléphone *</td>

                                                <td style="text-align: justify;">
                                                    asd</td>
                                            </tr>
                                            <tr>
                                                <td style="vertical-align:top">
                                                    Commentaires * </td>
                                                <td style="text-align: justify;">
                                                    asd</td>

                                            </tr>

                                        </tbody>
                                    </table>
</body></html>

-------=6281fc52e26ec15a40ac13ba7159c254--

-------=59c2bc360c3ef3ba2ff934e56d16bbaa
Content-Type: ; name=""
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=""





-------=59c2bc360c3ef3ba2ff934e56d16bbaa--

-------

Salutations
C. Rossat

#5 Forum Général PHP » Problème d'accents sur le header d'un email avec la fonction mail() » 30-08-2010 08:50:29

chrossat
Réponses : 8

Bonjour,

J'ai repris et adapté un formulaire qui permet l'envoi de pièces jointes. A la réception, nous avons ceci:

Confirmation de votre commande
Boulangerie Pâtisserie Bessa [webmaster@boulangeriepatisseriebessa.ch]

Le â ne passe paset devient â.

Le code de la ligne est:

//=====Création du header de l'e-mail
$header = "From: \"Boulangerie Pâtisserie Bessa\"<webmaster@boulangeriepatisseriebessa.ch>".$passage_ligne;
$header.= "Reply-to: \"Boulangerie Pâtisserie Bessa\" <webmaster@boulangeriepatisseriebessa.ch>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

Quelqu'un peut-il me dire quoi faire?

Salutations
C. Rossat

#6 Re : Forum Général PHP » Envoi d'une pièce jointe par email depuis un formulaire » 16-08-2010 17:42:27

Merci,

En effet, j'ai utilisé maintenant move_uploaded_file() et le fichier est bien uploadé. Mais le message d'erreur subsiste.
Warning: fopen() [function.fopen]: Filename cannot be empty in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file3.php on line 49
(toujours la même ligne $fichier1  = fopen($fichier, "r" );
La faute doit être dans le code qui me permet d'aller chercher le fichier dans le dossier temporaire upload/, mais je ne vois pas où.
Pouvez-vous m'aider à avancer d'un pas?


J'ai conservé la suite du code telle  quelle, en adaptant le nom des variables.

Pour rappel, dans le formulaire, les 2 dernières lignes sont:

Fichier : <input maxlength="60" name="fichier" size="40" type="file" /><br /><br />
    <input name="upload" type="submit" value="Envoyer" /></form>

et le code php est:

$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$commentaires= $_POST['commentaires'];
$fichier=$_POST['fichier'];
$upload=$_POST['upload'];

if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = 'upload/'; // dossier où sera déplacé le fichier
$tmp_file = $_FILES['fichier']['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') &&
!strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
{
exit("Le fichier n'est pas une image");
}
// on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichier']['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
echo "Le fichier a bien été uploadé";
}


//=====Déclaration des messages au format texte et au format HTML
$message_txt ="Nom : ";
$message_html = "<html><head></head><body><b>Données pour la demande d'accès</b>,<br><br> <b>Nom :</b> $nom <br> <b>Prenom :</b> $prenom <br> <b>Email: </b> $mail </body></html>";
//==========

//=====Lecture et mise en forme de la pièce jointe
$fichier1  = fopen($fichier, "r" );
$attachement = fread($fichier1, filesize($fichier));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<.....@skynet.be>\n";
$header.= "Reply-to: \"WeaponsB\" <......@skynet.be>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========

//=====Création du message
$message = "\n--".$boundary."\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====Ajout du message au format texte
$message.="Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_txt."\n";
//==========

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

//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_html."\n";
//==========

//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========



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

//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$fichier\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$fichier\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("test@test.com",$sujet,$message,$header);

Salutations
Christian

#7 Forum Général PHP » Envoi d'une pièce jointe par email depuis un formulaire » 16-08-2010 17:42:27

chrossat
Réponses : 3

Bonjour,

Lorsque je mets des données dans le formulaire et que je l'envoie, j'obtiens le message d'erreur suivant:

Warning: fopen(pdf_leger.jpg) [function.fopen]: failed to open stream: No such file or directory in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 21

Pour info, la ligne 21 est: $fichier = fopen($scan, "r" ); dans le fichier form_file2.php un peu plus bas dans le texte.


Le code du formulaire est:

<form action="form_file2.php" method="post" name="formulaire">
Nom : <input maxlength="50" name="nom" size="30" type="text" />
Prénom : <input maxlength="50" name="prenom" size="30" type="text" />
E-mail : <input maxlength="50" name="mail" size="30" type="text" />
Commentaires :<textarea cols="30" name="commentaires" rows="6" wrap="soft"></textarea>
Fichier : <input maxlength="60" name="scan" size="40" type="file" />

Le fichier form_file2.php:

<?php
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$commentaires= $_POST['commentaires'];
$scan=$_post['scan'];

echo"nom: $nom<br>"; // Rajouté pour voir le contenu des variables
echo"prenom: $prenom<br>"; // Rajouté pour voir le contenu des variables
echo"mail: $mail<br>"; // Rajouté pour voir le contenu des variables
echo"commentaires: $commentaires<br>"; // Rajouté pour voir le contenu des variables
echo"scan: $scan<br>"; // Rajouté pour voir le contenu des variables


//=====Déclaration des messages au format texte et au format HTML
$message_txt ="Nom : ";
$message_html = "<html><head></head><body><b>Données pour la demande d'accès</b>,<br><br> <b>Nom :</b> $nom <br> <b>Prenom :</b> $prenom <br> <b>Email: </b> $mail </body></html>";
//==========

//=====Lecture et mise en forme de la pièce jointe
$fichier = fopen($scan, "r" );
$attachement = fread($fichier, filesize($scan));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<.....@skynet.be>\n";
$header.= "Reply-to: \"WeaponsB\" <......@skynet.be>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========

//=====Création du message
$message = "\n--".$boundary."\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====Ajout du message au format texte
$message.="Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_txt."\n";
//==========

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

//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_html."\n";
//==========

//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========



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

//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$scan\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$scan\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("......@hotmail.com",$sujet,$message,$header);

//==========
?>

Merci et salutations
Christian

Pied de page des forums

Propulsé par FluxBB