PHP Pb attachement piece jointe a un mail

thais781 Messages postés 20 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 28 juillet 2010 - 6 juil. 2010 à 09:37
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 - 6 juil. 2010 à 19:31
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

xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
6 juil. 2010 à 12:01
Utiliser la classe PHPMailer tu aura beaucoup plus de facilié

Bon courage

Cordialement,


L0rD...
0
thais781 Messages postés 20 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 28 juillet 2010
6 juil. 2010 à 12:11
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
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
6 juil. 2010 à 12:29
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...
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
6 juil. 2010 à 13:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thais781 Messages postés 20 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 28 juillet 2010
6 juil. 2010 à 17:50
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
0
thais781 Messages postés 20 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 28 juillet 2010
6 juil. 2010 à 17:55
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
)
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
6 juil. 2010 à 17:56
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...
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
6 juil. 2010 à 19:02
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
0
thais781 Messages postés 20 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 28 juillet 2010
6 juil. 2010 à 19:04
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";
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
6 juil. 2010 à 19:31
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
0
Rejoignez-nous