Pièce jointe dans un email

Petit nouveau ! | 2 Messages

29 mars 2010, 16:35

Hey,

Je suis en train de mettre un formulaire pour envoyer un mail via mon site.
J'utilise donc pour se faire un script php trouvé su rle site du zéro, permettant d'envoyer des pièces jointes. Ce que je souhaiterai faire c'est à la place d'une pièce jointe se situant sur mon ordi, envoyé une image trouvé sur internet :

Ma première idée était d'enregistrer l'image trouvé sur internet dans une image(test) sur mon serveur, puis d'ouvrir cette image
Malheureusement, l'enregistrement de fonctionne pas du tout!!!

Dans $pièce se trouve l'url de l'image.
<?php
	function envoimail($mail,$sujet,$message_html,$piece)
	{
		
		//Enregistrement de l'image sur le serveur
		copy($piece,"test.jpg");
		
		if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui bugs
		{
			$passage_ligne = "\r\n";
		}
		else
		{
			$passage_ligne = "\n";
		}
		//=====Déclaration des messages au format texte et au format HTML
		$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
		$message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
		//==========
		 
		//=====Lecture et mise en forme de la pièce jointe
		$fichier   = fopen("test.jpg", "r");
		$attachement = fread($fichier, filesize("test.jpg"));
		$attachement = chunk_split(base64_encode($attachement));
		fclose($fichier);
		//==========
		 
		//=====Création de la boundary
		$boundary = "-----=".md5(rand());
		$boundary_alt = "-----=".md5(rand());
		//==========
		 
		//=====Définition du sujet
		$message_txt = "Votre boîte mail ne lit pas le html";
		//=========
		 
		//=====Création du header de l'e-mail
		$header = "From: \"flo\"<florent*****@gmail.com>".$passage_ligne;
		$header.= "Reply-to: \"flo\" <florent****@gmail.com>".$passage_ligne;
		$header.= "MIME-Version: 1.0".$passage_ligne;
		$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
		//==========
		 
		//=====Création du message
		$message = $passage_ligne."--".$boundary.$passage_ligne;
		$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
		$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
		//=====Ajout du message au format texte
		$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
		$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
		$message.= $passage_ligne.$message_txt.$passage_ligne;
		//==========
		 
		$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
		 
		//=====Ajout du message au format HTML
		$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
		$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
		$message.= $passage_ligne.$message_html.$passage_ligne;
		//==========
		 
		//=====On ferme la boundary alternative
		$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
		//==========
		 
		 
		 
		$message.= $passage_ligne."--".$boundary.$passage_ligne;
		 
		//=====Ajout de la pièce jointe
		$message.= "Content-Type: image/jpeg; name=\"test.jpg\"".$passage_ligne;
		$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
		$message.= "Content-Disposition: attachment; filename=\"test.jpg\"".$passage_ligne;
		$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
		$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
		//========== 
		//=====Envoi de l'e-mail
		mail($mail,$sujet,$message,$header);
		 
		//==========
	}
?>
ça fait deux jours que je sèche !! un peu d'aide s'il vous plait ???

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 16:57

tu veux pas mettre un lien <img> ?

Petit nouveau ! | 2 Messages

29 mars 2010, 17:04

héhé, non, le but c'est d'au moins d'envoyer une image distante en pièce jointe et le but ultime inavoué, l'envoyer dans le corps du message.

Ainsi j'ai aujourd'hui deux pistes de reflexion :

_ l'enregistrement sur mon serveur grâce au copy

_ utiliser ce code pour ouvrir et lire l'image distante grace à ce code:
		$fichier = fopen("http://www.topnews.in/files/pigeon3.jpg", "rb");
		$attachement = '';
			while (!feof($fichier)) {
				$attachement .= fread($fichier, 8192); //je sais pas à quoi sert le 8192
			}
		$attachement = chunk_split(base64_encode($attachement));
		fclose($fichier);
au lieu de :
$fichier   = fopen($piece, "r");
		$attachement = fread($fichier, filesize($piece));
		$attachement = chunk_split(base64_encode($attachement));
		fclose($fichier);

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 17:18

pour une fois je me rappelle pu, je sais que tu peu l'envoyer comme en pièce joint mais c'est attacher au corps du message, sinon tu peu utiliser du base64 avec le wrapper data:// et la ca marchera, mais bon c'est pas top