Rechercher : dans
Par :

[PHP] mail avec pièce jointe

Dernière réponse le 6 aoû 2007 à 07:17:07 mony84, le 3 aoû 2007 à 05:48:32 
 Signaler ce message aux modérateurs

Salut,
je veux envoyer un mail à partir d'un formulaire. Je veux que l'utilisateur puisse envoyer une pièce jointe en plus des champs texte saisis.
j'ai écrit ce code mais j'ai toujours un problème de transfert (

move_uploaded_file($temp, ) 
est tjrs false)

voila le bout de code php relatif à la pièce jointe
if (!empty($_POST)) #si le formulaire n'est pas vide
{

//------------entete
$delimiteur="------=".md5(uniqid(rand()));

$entete="MIME-Version:1.0\r\n";
$entete.="Content-Type:multipart/mixed;boudary=".$delimiteur."\r\n";
$entete.="\r\n";
//-----------le corps de l'email: le texte

$msg="--$delimiteur\r\n";
$msg.="Content-Type:text/plain; charset=\"iso-8859-1\"\r\n";
$msg.="Content-Transfer-Encoding:8bit\r\n";
$msg.="\r\n";
$msg.="ceci un email d'essai r\n";
$msg.="\r\n";


if(strlen($_FILES['attachement']['name']))
{
$rep = "upload/"; # répertoire temporaire d'upload
$erreur = false; // pas encore d'érreur

//------------Le message : le 1er fichier
$fichier = $_FILES['attachement'];
$temp = $fichier['tmp_name'];
$name=$fichier['name'];
$size=$fichier['size'];
$type=$fichier['type'];
$destination = $rep.$name;
if (!@is_uploaded_file($temp ))
{$erreur =true;
print( "Téléchargement de ".$name." impossible");
}
elseif(!@move_uploaded_file($temp, $destination))
{$erreur = true;
print("Problème de transfert de ".$name);//c'est là que j'ai un problème
}
else{



if ($fp=@fopen($destination,"rb")){
$fichierAttache=@fread($fp,$size);
@fclose($fp);
print("lecture de fichier reussie");
$piecejointe=chunk_split(base64_encode($fichierAttache));}


else{
$erreur=true;
print("Problème de lecture du fichier".$name);}


if(!($erreur))
{


$msg.="--$delimiteur\r\n";
$msg.="Content-Type:".$type."; name=".$name."\r\n";
$msg.="Content-Transfer-Encoding: base64\r\n";
$msg.="Content-Disposition: attachment; filename=".$name."\r\n";
$msg.="\r\n";
$msg.=$piecejointe."\r\n";
$msg.="\r\n\r\n";
$msg.="--$delimiteur--\r\n";

$to="toto@yahoo.fr";
$from="info@server.fr";
mail($to,"test de piece jointe",$msg,$entete);
}}}}


?>


Je ne sais pas sur quel critère on choisit le répertoire de transfert (ici upload).
J'ai une question à propos de la fonction mail() de php, comment lui ajouter un paramètre pour avoir une connexion avec authentification sur le serveur smtp? j'ai réussi à me connecter à un serveur smtp avec un mot de passe en utilisant le package mail de pear mais je ne sais pas comment faire pour ajouter une pièce jointe avec pear.

voila, et merci par avance.

Meilleures réponses pour « [PHP] mail avec pièce jointe » dans :
[Outlook Express] Pièces jointes impossibles à envoyer VoirSi Outlook Express ne peut pas envoyer les pièces jointes ajoutées à votre mail, ceci est probablement dû au fait qu'elles possèdent une taille trop volumineuse. Pour y remédier, la solution consiste à scinder les pièces jointes en plusieurs...
Outlook Express bloque les pièces jointes VoirLors de la consultation d'un email, Outlook (Express) refuse d'ouvrir les fichiers attachés. Il s'agit vraisemblablement d'un problème de configuration de Outlook évitant l'ouverture des pièces jointes pour des raisons de sécurité. Pour y...

1

mony84, le 3 aoû 2007 à 11:27:04

J'ai essayé d'envoyer une pièce jointe situé sur ss le même répertoire que mon fichier qui contient le fichier.php et le fichier.html. J'ai réussi à envoyer cette pièce jointe, avec le package mail_mime de PEAR.
Mon problème mnt c'est le fichier qui doit être envoyé par le formulaire. Est ce que je ne peux pas tester la validité de mon code en local?


include('Mail/Mail.php');
include('Mail/mime.php');

$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = 'exemple.jpg';
$crlf = "\n";


$hdrs = array(
              'From'    => 'info@toto.com',
              'Subject' => 'Test mime message',
	      'To'=>'toto@yahoo.fr'
              );
			  
$params = array(
              'host'    => 'smtp.c2.corpease.net',
              'port' => '25',
			  'auth'=>true,
			  'username'=> 'info@toto.com',
			  'password' => 'xxx'
			  );
				

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'images/jpg');




//do not ever try to call these lines in reverse order
$body = $mime->get();
$hdrs = $mime->headers($hdrs);




// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $params);

if (PEAR::isError($mail_object)) 
{
  print "<p>construction de l'objet 'Mail' ratée car ";
  die($mail_object->getMessage()); 
} else
{
  print "<p>objet 'Mail'  construit !";
}

$send_result = $mail_object->send('toto@yahoo.fr',$hdrs,$body); 
if (PEAR::isError($send_result)) 
{
  print "<table >
<tr><td bgcolor='#B22222'><font color='#FFFFFF'> This service is not available now. Please try later.</font>
</td></tr>
</table> ";
  die($send_result->getMessage()); 
} else
{
  print "<table >
<tr><td bgcolor='#B22222'><font color='#FFFFFF'> An email is sent </font>
</td></tr>
</table";
}
?>


PS:J'utiliseEasyphp pour developper mon code.

Help!!please

Répondre à mony84

2

mony84, le 3 aoû 2007 à 12:14:45
  • +2

ça marche, j'ai ajouté ces lignes et j'ai crée un dossier unpload ss le même repertoire que mes fichiers .html et .php
Le problème maintenat c'est que je ne sais pas comment ça va se passer si j'heberge mon site.
c'est sur qu'ils ont un dossier upload propre à tt le serveur (j'imagine)


if(strlen($_FILES['attachement']['name']))
{
$rep = "upload/"; # répertoire temporaire d'upload
$erreur = false; // pas encore d'érreur

//------------Le message : le 1er fichier
$fichier = $_FILES['attachement'];
$temp = $fichier['tmp_name'];
$name=$fichier['name'];
$size=$fichier['size'];
$type=$fichier['type'];
$destination = $rep.$name;
if (!@is_uploaded_file($temp ))
{$erreur =true;
print( "Téléchargement de ".$name." impossible");
}
elseif(!@move_uploaded_file($temp, $destination))
{$erreur = true;
print("Problème de transfert de ".$name);
}


if(!($erreur))
{

$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = $destination;
$crlf = "\n";




apparemment, je suis entrain de poser des questions et y répondre moi même .

Répondre à mony84

3

 mony84, le 6 aoû 2007 à 07:17:07
  • +4

Voila le résumé de la solution:

include('Mail/Mail.php');
include('Mail/mime.php');

$rep = "upload/"; # répertoire temporaire d'upload
if(strlen($_FILES['attachement']['name']))
{
$erreur = false; // pas encore d'erreur

//------------Le message : le 1er fichier
$fichier = $_FILES['attachement'];
$temp = $fichier['tmp_name'];
$name=$fichier['name'];
$size=$fichier['size'];
$type=$fichier['type'];
$destination = $rep.$name;
if (!@is_uploaded_file($temp ))
{$erreur =true;
print( "Téléchargement de ".$name." impossible");

}
elseif(!@move_uploaded_file($temp, $destination))
{$erreur = true;
print("Problème de transfert de ".$name);

}

if(!($erreur))
{

$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = $destination;
$crlf = "\n";


$hdrs = array(
              'From'    => '',
              'Subject' => 'c un test',
			  'To'=>'toto@yahoo.fr',
			  'Reply-To'=>'toto1@yahoo.fr'
              );
			  
$params = array(
              'host'    => 'smtp.c2.corpease.net',
              'port' => '25',
			  'auth'=>true,
			  'username'=> 'info@smtp.net',
			  'password' => '-------'
			  );
				

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, $type);



$body = $mime->get();
$hdrs = $mime->headers($hdrs);




// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $params);

if (PEAR::isError($mail_object)) 
{
  print "<p>construction de l'objet 'Mail' ratée car ";
  die($mail_object->getMessage()); 
} else
{
  print "<p>objet 'Mail'  construit !";
}

$send_result = $mail_object->send('toto@yahoo.fr',$hdrs,$body); 
if (PEAR::isError($send_result)) 
{
  print "This service is not available now. Please try later.";
  die($send_result->getMessage()); 
} else
{
  print " An email is sent ";
@unlink($destination); //pour liberer le fichier temporaire créé
}
}}


pour ajouter un autre fichier joint il suffit de faire un autre test sur le 2ème fichier indépendemment du 1er.

Répondre à mony84