Envoie d'une pièce jointe venant d'un formulaire par mail

Eléphant du PHP | 81 Messages

03 mai 2006, 12:22

Bonjour à tous,
Dans un formulaire j’ai un input de type « file » qui permet à l’internaute de parcourir son ordi pour inclure une pièce jointe au format word (.doc).
Une fois le formulaire posté, je voudrais envoyer un mail avec la pièce jointe. Mais la je ne sais pas comment la récupérer pour l’insérer dans mon mail.
J’ai récupéré une classe « class.mailer.php » ou j’ai la possibilité de faire un attachment :
$mailer->attachment('/chemin_du_fichier/fichier.doc', 'fichier.doc');
Je ne sais pas quoi mettre dans le chemin du fichier.

voici mon code :
<?php
require_once("../SQL/param_connect.php");

include('class.mailer.php');

$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$tel=$_POST['tel'];
$email=$_POST['eMail'];
$adresse=$_POST['adresse'];
$cp=$_POST['cp'];
$ville=$_POST['ville'];
$pays=$_POST['pays'];


$comment=$_POST['comment'];
$id_num=$_POST['id_num'];
$id_cv=$_POST['id_cv'];

$date = date("dmYHis");


// upload du cv
$content_dir = '../fichiers/'; // dossier où sera déplacé le fichier

$tmp_file = $_FILES['fichier']['tmp_name'];

// on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    $toto=move_uploaded_file($tmp_file, $content_dir . $date . '_' . $name_file);


$subject = 'essai';

$mailer = new Mailer();

$mailer->set_from('[email protected]', 'essai');
$mailer->set_address('[email protected]');

$mailer->set_format('3');
$mailer->set_subject($subject);


$mailer->attachment('/chemin_fichier/fichier.doc', 'fichier.doc');



if ( $mailer->send() ) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <title>Cadidature pour le poste de : <?php echo $idcv; ?></title>
    <link type="text/css" href="../css/formstyles.css" rel="stylesheet"/>
</head>

<body>
  <div id="last">
<p>Votre candidature a bien été enregistrée.</p>
</div>
</body>

</html>

<?php
$chemin_cv="http://www.arcos-partners.com/fichiers/". $date . '_' . $name_file;

$r2="insert into candidature (nom, prenom, email, tel, adresse1, cp, ville, pays, id_offre, message,date_depot, chemin_cv)
                 values('$nom', '$prenom', '$email', '$tel', '$adresse', '$cp', '$ville', '$pays', '$id_num', '$comment', NOW(), '$chemin_cv')";
$rq2=mysql_query($r2) or die("Erreur : ".mysql_error());

} else { echo "erreur";}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2006, 12:32

Hello,

Pour pouvoir retransmettre un fichier, il te faut dans un premier temps le récupérer sur le serveur, puis le passer en pièce jointe.

Pour la récupération sur le serveur, c'est ce que fait la fonction move_uploaded_file() en le copiant dans le dossier que tu lui spécifies.

L'envoi du fichier en pièce jointe se fait donc ensuite à partir de ce même dossier :)

Eléphant du PHP | 81 Messages

03 mai 2006, 15:04

Merci Ryle, mais maintenant comment connaitre le nom du fichier sachant que lorsque je l'insére dans le dossier sur mon serveur, je le nomme avec une date + l'heure + les secondes et le nom du fichier d'origine. De pus j'ai plusieurs fichiers .doc dans mon dossier.
Je fais cela pour etre sur d'avoir un nom unique par fichier enregistré.

si je mets comme chemin :
$mailer->attachment('www.monsite.com/fichier/'.$date . '_' . $name_file, 'cv.doc');
Il ne vas pas me retrouver le fichier !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2006, 15:59

Le nom du fichier, tu l'as effectivement puisque tu le génères pour l'enregistrer, il te suffit donc bien de l'utiliser. En revanche, le chemin n'est pas l'url du fichier, mais l'emplacement du fichier sur le serveur (exactement comme pour le move_upload) :

Si tu enregistres le fichier dans le dossier " $content_dir " avec le nom " $date.'_'.$name_file ", alors il te suffit normalement de redonner le même chemin (pour qu'il retrouve le dossier) et le même nom (pour le fichier) à ta fonction attachement :)

Eléphant du PHP | 81 Messages

03 mai 2006, 17:03

voici le chemin que je mets en attachment :
$mailer->attachment($content_dir .$date . '_' . $name_file, 'cv.doc');
Je n'ai pas d'erreur mais je ne reçois pas de mail. Sans attachment mon mail fonctionne correctement.

Eléphant du PHP | 81 Messages

10 mai 2006, 13:14

merci Ryle, c'est bien ça. Il faut simplement mettre le bon chemin.

Eléphant du PHP | 297 Messages

30 juin 2006, 21:01

salut,
je souhaite egalement faire un envoie de mail avec fichier joint !
ou puis je trouver le fichier « class.mailer.php » ?
merci

Eléphant du PHP | 297 Messages

30 juin 2006, 21:45

ben j'ai trouvé !
par contre je n'arrive pas a trouver la solution pour l'envoie de deux fichiers simultanement :(
et aussi :oops: , je voudrais que le formulaire puisse etre expédié meme si le fichier n'est pas joint...pour l'instant j'ai l'erreur !
si qlq sait comment !
merci