IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP mailto fichier-joint


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Par défaut PHP mailto fichier-joint
    Bonjour,

    J'ai un problème avec le mailto, je suis en stage et j'ai repris un bout de code de mes prédécesseurs le problème c'est que si je ne met pas de fichier joint dans le mail j'ai quand même un fichier joint mais vide du nom "ATT00****.dat"


    J'aimerais savoir qu'elle partie lui fait dire "il y aura un fichier joint"

    Je pense que ça vient de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n
    Mais j'en suis pas sur...
    Et si c'est ça j'aimerais juste connaitre le code pour lui dire "sans fichier joint"

    Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    $message = "$genre $nom\n\n\nAdresse : $adresse \nCode postal : $codePostal\nVille : $ville\nTél : $telephone\nE-mail : $email\n\nmessage :\n$message";
     
    				$boundary = "-----=".md5(uniqid(rand()));
    				$header = "MIME-Version: 1.0\r\n";
    				$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    				$header .= "\r\n";
     
    				$msg = "--$boundary\r\n";
    				// Et pour chaque partie on en indique le type
    				$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
    				// Et comment il sera codé
    				$msg .= "Content-Transfer-Encoding:8bit\r\n";
    				// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    				$msg .= "\r\n";
    				// Enfin, on peut écrire le texte de la 1ère partie
    				$msg .= $message;
    				$msg .= "\r\n";
     
     
    				$dossier = "./upload/";
    				$fichier1 = $_FILES['F1']['name'];
    				// $fichier1 = "cahier_des_charges";
     
    				// chmod($dossier,0777);
     
    				// echo $_FILES['F1']['name'];
     
    				if(is_uploaded_file($_FILES['F1']['tmp_name'])){
    					copy($_FILES['F1']['tmp_name'],$dossier.$fichier1);
    				}
     
    				// if(move_uploaded_file($_FILES['F1']['tmp_name'], $dossier)){
    				// 					chmod($dossier.$fichier1,0644);
    				// 				}
     
    					// Tout d'abord lire le contenu du fichier
    					$file = $dossier.$fichier1;
    					$fp = fopen($file, "rb");   // b c'est pour les windowsiens
    					$attachment = fread($fp, filesize($file));
    					fclose($fp);
     
     
    					// puis convertir le contenu du fichier en une chaîne de caractère
    					// certe totalement illisible mais sans caractères exotiques
    					// et avec des retours à la ligne tout les 76 caractères
    					// pour être conforme au format RFC 2045
    					$attachment = chunk_split(base64_encode($attachment));
     
    				// Ne pas oublier que chaque partie du message est séparé par une frontière
    				$msg .= "--$boundary\r\n";
    				// Et pour chaque partie on en indique le type
    				$msg .= "Content-Type: application/octet-stream; name=\"$fichier1\"\r\n";
    				// Et comment il sera codé
    				$msg .= "Content-Transfer-Encoding: base64\r\n";
    				// Petit plus pour les fichiers joints
    				// Il est possible de demander à ce que le fichier
    				// soit si possible affiché dans le corps du mail
    				$msg .= "Content-Disposition: inline; filename=\"$fichier1\"\r\n";
    				// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    				$msg .= "\r\n";
    				// C'est ici que l'on insère le code du fichier lu
    				$msg .= $attachment . "\r\n";
    				$msg .= "\r\n\r\n";
     
    				// voilà, on indique la fin par une nouvelle frontière
    				$msg .= "--$boundary--\r\n";
     
     
     
    				mail($destinataire, "contact depuis le site internet lci-packaging.com", $msg,"Reply-to: $reponse\r\nFrom:$expediteur\r\n".$header);
     
    				if (isset($_FILES['F1']['name']) AND $_FILES['F1']['name'] != '')
    					unlink("./upload/".$fichier1);
    				print ("Votre demande a &eacute;t&eacute; envoy&eacute;e. <br>Vous serez recontact&eacute; par nos &eacute;quipes dans les plus brefs d&eacute;lais.");
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Voici un article pour comprendre l'envoi d'Emails avec/sans fichier joint: http://a-pellegrini.developpez.com/tutoriels/php/mail/

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Par défaut
    Enfaite j'ai déjà lu, mais ce que je ne comprend pas c'est le boundary, pour lui dire "il n'y a pas de pièces jointes ne m'en met pas" je ne sais pas comment faire.

    En gros dans tout ce code je ne sais pas quelle ligne je pourrait supprimer pour qu'il n'y ai pas de pièce jointe.

    Si je supprime le multipart il faut que je supprime tout les boundary mais je pense pas que ce soit la solution. (?)


    Merci,

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Si le mail n'a qu'un format (TXT ou HTML mais pas les deux) et pas de pièce jointe, pas besoin de le mettre en multipart, donc pas besoin de boundary.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Par défaut
    La j'ai besoin du fichier joint, mais si la personne ne met pas de fichier joint, si j'ai bien compris
    je remplace le multipart part du text/plain et j'enlève les boundary ?

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_FILE['fichier']) {
    Content-Type: multipart/mixed; boundary="$boundary"\r\n
    }
    else {
    Content-Type: text/plain; charset="iso-8859-1"
    }

    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef opération transport urbain
    Inscrit en
    Avril 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Chef opération transport urbain
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 92
    Par défaut
    Je te dirais de faire une vérification à savoir si le champ fichier de ton formulaire était vide. Si oui, tu passes la manipulation du fichier, sinon tu la fais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    $message = "$genre $nom\n\n\nAdresse : $adresse \nCode postal : $codePostal\nVille : $ville\nTél : $telephone\nE-mail : $email\n\nmessage :\n$message";
     
    				$boundary = "-----=".md5(uniqid(rand()));
    				$header = "MIME-Version: 1.0\r\n";
    				$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    				$header .= "\r\n";
     
    				$msg = "--$boundary\r\n";
    				// Et pour chaque partie on en indique le type
    				$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
    				// Et comment il sera codé
    				$msg .= "Content-Transfer-Encoding:8bit\r\n";
    				// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    				$msg .= "\r\n";
    				// Enfin, on peut écrire le texte de la 1ère partie
    				$msg .= $message;
    				$msg .= "\r\n";
     
     
    				$dossier = "./upload/";
    if($_FILES['F1']['error'] == 0){
    				$fichier1 = $_FILES['F1']['name'];
    				// $fichier1 = "cahier_des_charges";
     
    				// chmod($dossier,0777);
     
    				// echo $_FILES['F1']['name'];
     
    				if(is_uploaded_file($_FILES['F1']['tmp_name'])){
    					copy($_FILES['F1']['tmp_name'],$dossier.$fichier1);
    				}
     
    				// if(move_uploaded_file($_FILES['F1']['tmp_name'], $dossier)){
    				// 					chmod($dossier.$fichier1,0644);
    				// 				}
     
    					// Tout d'abord lire le contenu du fichier
    					$file = $dossier.$fichier1;
    					$fp = fopen($file, "rb");   // b c'est pour les windowsiens
    					$attachment = fread($fp, filesize($file));
    					fclose($fp);
     
     
    					// puis convertir le contenu du fichier en une chaîne de caractère
    					// certe totalement illisible mais sans caractères exotiques
    					// et avec des retours à la ligne tout les 76 caractères
    					// pour être conforme au format RFC 2045
    					$attachment = chunk_split(base64_encode($attachment));
     
    				// Ne pas oublier que chaque partie du message est séparé par une frontière
    				$msg .= "--$boundary\r\n";
    				// Et pour chaque partie on en indique le type
    				$msg .= "Content-Type: application/octet-stream; name=\"$fichier1\"\r\n";
    				// Et comment il sera codé
    				$msg .= "Content-Transfer-Encoding: base64\r\n";
    				// Petit plus pour les fichiers joints
    				// Il est possible de demander à ce que le fichier
    				// soit si possible affiché dans le corps du mail
    				$msg .= "Content-Disposition: inline; filename=\"$fichier1\"\r\n";
    				// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    				$msg .= "\r\n";
    				// C'est ici que l'on insère le code du fichier lu
    				$msg .= $attachment . "\r\n";
    				$msg .= "\r\n\r\n";
     
    				// voilà, on indique la fin par une nouvelle frontière
    				$msg .= "--$boundary--\r\n";
     }
     
     
    				mail($destinataire, "contact depuis le site internet lci-packaging.com", $msg,"Reply-to: $reponse\r\nFrom:$expediteur\r\n".$header);
     
    				if (isset($_FILES['F1']['name']) AND $_FILES['F1']['name'] != '')
    					unlink("./upload/".$fichier1);
    				print ("Votre demande a &eacute;t&eacute; envoy&eacute;e. <br>Vous serez recontact&eacute; par nos &eacute;quipes dans les plus brefs d&eacute;lais.");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2011, 08h59
  2. ASP et Mailto Piece Jointe et Generer Fichier XLS
    Par soltani.slim dans le forum ASP
    Réponses: 2
    Dernier message: 18/01/2006, 17h21
  3. Réponses: 6
    Dernier message: 17/11/2005, 14h39
  4. Formulaire PHP+ envoi de fichier joint
    Par GraphicProvider dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2005, 18h12
  5. Limiter taille fichier joint à un mail
    Par fdthierry dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 27/08/2004, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo