PHP Pb attachement piece jointe a un mail

Signaler
Messages postés
20
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
28 juillet 2010
-
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
-
Bonjour,

J'ai un formulaire avec entrée d'un fichier joint (codé en html) ... jusque la pas de pb.
J'envoie les réponses de ce formulaire avec fichier joint via mail() (en PHP)
Je reçois bien le mail avec toute les infos sauf que le fichier chargé n'est pas joint au mail (en pièce jointe) mais est présent dans le corps du texte donc illisible ....

Si quelqu'un a une idée

Merci d'avance

Résultat :
Nom : MonNom
Prénom : MonPrenom
Téléphone : 0120304050
Email: toto@gmail.com
Métier : Process

Commentaires : Salut

-------= a98c8098702d571f889cace7f8e4d600
Content-Type: image/png; name="Test.doc"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="Test.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAIgAAAAAAAAAA
EAAAJAAAAAEAAAD+////AAAAACEAAAD/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////s
pcEAcWAJBAAA8BK/AAAAAAAAEAAAAAAABgAABQgAAA4AYmpianFQcVAAAAAAAAAAAAAAAAAAAAAA
AAAMBBYALhAAABM6AQATOgEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA
AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAKgDAAAAAAAAqAMAAKgD
AAAAAAAAqAMAAAAAAACoAwAAAAAAAKgDAAAAAAAAqAMAABQAAAAAAAAAAAAAALwDAAAAAAAA4AMA
AAAAAADgAwAAAAAAAOADAAAAAAAA4AMAAAwAAADsAwAADAAAALwDAAAAAAAALQYAALYAAAAEBAAA
AAAAAAQEAAAAAAAABAQAAAAAAAAEBAAAAAAAAAQEAAAAAAAABAQAAAAAAAAEBAAAAAAAAAQEAAAA
AAAArAUAAAIAAACuBQAAAAAAAK4FAAAAAAAArgUAAAAAAACuBQAAAAAAAK4FAAAAAAAArgUAACQA
AADjBgAAaAIAAEsJAAB+AAAA0gUAABUAAAAAAAAAAAAAAAAAAAAAAAAAqAMAAAAAAAAEBAAAAAAA



Ci-dessous mon code PHP :
<?
ini_set('display_errors', 1);
error_reporting(-1);

$Nom = $_POST['Candidature_Nom'];
$Prenom = $_POST['Candidature_Prenom'];
$Telephone = $_POST['Candidature_Telephone'];
$Email = $_POST['Candidature_Email'];
$Metier = $_POST['Candidature_Metier'];
$Commentaires = $_POST['Candidature_Commentaires'];
$to = "drh@aiuta.fr";

$name_file = $_FILES['Candidature_CV']['name'];

$source=$_FILES['Candidature_CV']['tmp_name'];

move_uploaded_file($source, "./".$name_file);

$extension=get_extension($name_file);

$type="text/plain";

if($type=="doc")
{
$type="text/vnd.ms-word";
}
else if($type=="xls")
{
$type="text/vnd.ms-excel";
}

$type2="image/png";

if($extension=="gif")
{
$type2="image/gif";
}
else if($extension=="bmp")
{
$type2="image/bmp";
}

function get_extension($filename)
{
$parts = explode('.',$filename);
$last = count($parts) - 1;
$ext = $parts[$last];
return $ext;
}

//----------------------------------
// Construction de l'entête
//----------------------------------

$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary="$boundary"\r\n";
$header .= "\r\n";

$msg = "Nom :\t$Candidature_Nom\n";
$msg .= "Prénom :\t$Candidature_Prenom\n";
$msg .= "Téléphone :\t$Candidature_Telephone\n";
$msg .= "Email:\t$Candidature_Email\n";
$msg .= "Métier :\t$Candidature_Metier\n\n";
$msg .= "Commentaires :\t$Candidature_Commentaires\n\n";

$subject = "Renseignements";

if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");
$attachment = fread($fp, filesize($file));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name="$file"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename="$file"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";

$destinataire = $to;
$expediteur = $_POST['Candidature_Email'];
$reponse = $expediteur;

mail($destinataire, $subject, $msg,"From: $Candidature_Email");
echo "Mail envoyé à $destinataire";
}

if($name_file!="")
{
unlink($name_file);
}
?>

10 réponses

Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
Utiliser la classe PHPMailer tu aura beaucoup plus de facilié

Bon courage

Cordialement,


L0rD...
Messages postés
20
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
28 juillet 2010

Merci, mais mon hébergeur m'indique qu'il faut utiliser la fonction mail() ... et non PHPmailer.

Il doit y avoir un bug tout con dans mon code ... mais la je ne vois pas ...

Helppppppppppppp


Thais
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
Si ton hébergeur la dit alors.... :)

fait un phpinfo();

si ta version de php est > à 5

PHPMailer est fait pour toi je confirme... peux importe ce que peut bien te dire ton hébergeur, je serait curieux de voir sa d'ailleur :)


L0rD...
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
En effet pour que tu comprenne, PHPMailerse sert de la fonction mail() mais te facilite le travail.

Par exemple pour mettre une pièce jointe tu auras juste à faire :
<?php
$mail->AddAttachment('chemin_fichier/fichier.doc');
?>

Facile non ?

PHPMailer !!!


_________________________________
Min iPomme
Messages postés
20
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
28 juillet 2010

Bonjour,

Merci pour votre aide.
J'ai fait un phpinfo, je suis en version PHP Version 4.4.9 (pour info, mon hebergeur est 1&1.com)

J'ai regardé phpmailer, effectivement, ca a l'air sympa, par contre, il faut l'installer sr le serveur :

L'installation de PHP Mailer est assez simple. Il faut dézipper le fichier dans le répertoire racine de votre serveur Web référencé par la variable DocumentRoot dans le fichier de configuration d'Apache (httpd.conf)

Par contra, la je ne sait pas comment faire, et je ne sais pas paramétrer le serveur de 1&1 ...

Peut être avez-vous des idées comment tester mon code dans mon premier message pour savoir pourquoi ca ne marche pas ???

Merci d'avance pour votre aide.

Thais
Messages postés
20
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
28 juillet 2010

Pour info, je rajoute le résultat du phpinfo sur le pb du fichier :

[b]Variable
/b_FILES["Candidature_CV"]

[b]Value
/bArray
(
[name] => Test.doc
[type] => application/msword
[tmp_name] => /tmp/phppcVYhu
[error] => 0
[size] => 19968
)
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
Quand il parle de serveur WEB il veulent dire FTP

Tu fait exactement pareil que quand tu dépose tes fichier HTML / PHP sur ton FTP

par contre fait bien attention a prendre la verison PHP4 de PHPMailer


L0rD...
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Re,

Je suis chez 1and1 aussi. Il faut que tu active php5 comme suit :
tu créé un fichier texte sur ton site à la racine que tu nomme .htaccess (Un point au début, pas d'extension à la fin).
Dedans tu met :
AddType x-mapp-php5 .php

Action approuvée par 1and1.

Ensuite tu met les fichiers de PHPMailer sur ton FTP, tu suis le tuto et ce seras bon !


_________________________________
Min iPomme
Messages postés
20
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
28 juillet 2010

Bonjour,

J'ai regardé phpmailer, mais c'est peu trop compliqué pour moi ... je vais resté sur mon code d'avant.

En fait, j'ai fait quelques tests, il semblerait que mon bugs soit dans la partie de code suivante.
J'ai l'impression que mon code ouvre le fichier, le read et attache le contenu au corps du text ...
Sauf que je voudrais qu'il fasse juste l'attacher au mail ...

Code :
if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");
$attachment = fread($fp, filesize($file));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name="$file"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename="$file"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
En réalité utiliser PHPMailer c'est plus simple que ce que tu fais :

Activation de PHP5 chez 1and1

Etape 1 : Tu créé un fichier nommé htaccess.txt
Etape 2 : Dans ce fichier écris la ligne suivante :
AddType x-mapp-php5 .php

Etape 3 : Tu met ce fichier sur ton serveur à la racine de ton site ;
Etape 4 : Tu renomme ce fichier de htaccess.txt en .htaccess
Instalation de PHPMailer

Etape 1: Tu télécharge PhpMailer en cliquant ICI
Etape 2 : Tu dézipe le fichier "PHPMailer_v5.1.zip" ;
Etape 3 : Tu renomme le dossier PHPMailer_v5.1 en PHPMailer
Etape 4 : Tu met le dossier sur ton FTP.
Utilisation de PHPMailer


<?
ini_set('display_errors', 1);
error_reporting(-1);

$Nom = $_POST['Candidature_Nom'];
$Prenom = $_POST['Candidature_Prenom'];
$Telephone = $_POST['Candidature_Telephone'];
$Email = $_POST['Candidature_Email'];
$Metier = $_POST['Candidature_Metier'];
$Commentaires = $_POST['Candidature_Commentaires'];
$to = "drh@aiuta.fr";


$msg = "Nom :\t$Candidature_Nom\n";
$msg .= "Prénom :\t$Candidature_Prenom\n";
$msg .= "Téléphone :\t$Candidature_Telephone\n";
$msg .= "Email:\t$Candidature_Email\n";
$msg .= "Métier :\t$Candidature_Metier\n\n";
$msg .= "Commentaires :\t$Candidature_Commentaires\n\n";
$subject = "Renseignements"; 

$name_file = $_FILES['Candidature_CV']['name'];
$source=$_FILES['Candidature_CV']['tmp_name'];
move_uploaded_file($source, "./".$name_file); 

require_once('PHPMailer/class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->SetFrom($Candidature_Email, $Nom." ".$Prenom);
$mail->AddAddress("drh@aiuta.fr");
$mail->Subject = $subject;
$mail->MsgHTML($msg);
if($name_file!="")
{
   $mail->AddAttachment("./".$name_file); 
}
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Mail envoyé à $destinataire !";
  if($name_file!="")
    unlink($name_file); 
}
?>


_________________________________
Min iPomme