Page 1 sur 1

[Annulé]Envois de pièce-jointe

Posté : 23 août 2005, 16:51
par crash_override
Bonjour,
Alors voila, j'utilise un script pour pouvoir envoyer des pièces-jointe vers une messagerie. Pour l'instant il ne fait qu'uploader la pièce-jointe dans un dossier sur le server. Donc je voudrais qu'il envois la pièce-jointe vers une messagerie et sur le server (pour garder une copie). Le script se constitue de deux pages; la première pour un premier envois de pièce-jointe; et d'une seconde qui inscrit si oui ou non la pièce-jointe est envoyée avec la possiblité d'envoyer une autre pièce-jointe. Voici le script utilisé:
Première page:
<html>
<head>
<title></title>
</head>
<body>
<?php
if(isset($_POST['submit'])) {
    handleupload();
}
?>
<form ENCTYPE="multipart/form-data" method="POST" action="upload.php">
    fichier:<INPUT TYPE="FILE" NAME="userfile" SIZE="35">
    <input type="hidden" name="MAX_FILE_SIZE" value="20000000">
    <input type="submit" value="Upload" name="submit">
    <br />
</form>
</body>
</html>
Deuxième page:
<?php

$new_dir = "uploads/";

if(!is_dir($new_dir)) echo "<font color=red>Please first create the <b>$new_dir</b> folder(s) to store the uploads.</font>";

function handleupload() {
    global $new_dir;
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        echo "<br />";
        if($_FILES['userfile']['size'] <= $_POST['MAX_FILE_SIZE']) {
            $realname = $_FILES['userfile']['name'];
            if(copy($_FILES['userfile']['tmp_name'], $new_dir.$realname)) {
                echo "<br /><font color=\"green\"><b>$realname</b> was successfuly uploaded</font>";
            }else {        
                echo "<br /><font color=\"red\"><b>$realname</b> could not be successfuly uploaded</font>";
            }
                        
        }else {
            echo "<br />The File size exceeded the ".($_POST['MAX_FILE_SIZE']/1024)."kb max file size allowed.<br />";
        }
    } else {
        echo "<br />Possible file upload attack: filename ".$_FILES['userfile']['name'].".";
    }
}

?>
<html>
<head>
<title></title>
</head>
<body>
<?php
if(isset($_POST['submit'])) {
    handleupload();
}
?>
<form ENCTYPE="multipart/form-data" method="POST" action="upload.php">
    Fichier:<INPUT TYPE="FILE" NAME="userfile" SIZE="35">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
    <input type="submit" value="Upload" name="submit">
    <br />
</form>
</body>
</html>
Merci et bonne lecture.

Posté : 23 août 2005, 17:00
par tibougnat
régarde du coté de la classe phpmailer, tu pourra soit l'utiliser soit t'en inspirer :)

Posté : 23 août 2005, 17:13
par crash_override
Merci à toi, mais là je n'y comprends rien du tout, déjà que j'ai du mal avec celui posté. Il n'y à pas une solution plus simple ? Merci par avance

Posté : 23 août 2005, 19:22
par crash_override
Alors j'ai reussi, à l'aide d'un autre script, à envoyer une pièce-jointe.Voici le script et le formulaire utilisé:

Le formulaire:
	<html>
	<head>
	<title>test</title>
	</head>
	<body>
 <form vname="FormName" action="index.php3" method="POST" enctype="multipart/form-data" name="form">
<table border="0" cellpadding="5" cellspacing="0" width="137">
     <tr>
         <td>Sujet</td>
         <td><input type="text" name="sujet" size="35"></td>
     </tr>
     <tr>
         <td>Message</td>
         <td><textarea rows="12" name="message" cols="60"></textarea></td>
     </tr>
     <tr>
         <td>Fichier joint:</td>
         <td><input type="hidden" name="MAX_FILE_SIZE" value="20000000"><input name="NomFichier" type="file" size="16"></td>
     </tr>
     <tr>
         <td>Priorit&eacute;:</td>
         <td>
             <div align="left">
                 <select name="priority" size="1">
                     <option value="1">Urgent
                     <option value="2">Haute
                     <option value="3">Moyenne
                     <option value="4">Basse
                     <option value="5">Tr&egrave;s basse
                 </select> <input type="submit" value="Envoyer"></div>
         </td>
     </tr>
 </table>
 </form>
	</body>
	</html>
Le script:
<?
/* Insert de la class qui envoie la pièce jointe */
require "CMailFile.php3";

/* Paramètres d'envoi du mail. */
$newmail = new CMailFile($sujet,"[email protected]","Membres",$message,$NomFichier);
$newmail->sendfile();
?>
Le require:
<?
class CMailFile {
	var $subject;
	var $addr_to;
	var $text_body;
	var $text_encoded;
	var $mime_headers;
	var $mime_boundary = "--==================_846811060==_";
	var $smtp_headers;
	
	function CMailFile($subject,$to,$from,$msg,$filename,$mimetype = "application/octet-stream", $mime_filename = false) {
		$this->subject = $subject;
		$this->addr_to = $to;
		$this->smtp_headers = $this->write_smtpheaders($from);
		$this->text_body = $this->write_body($msg);
		$this->text_encoded = $this->attach_file($filename,$mimetype,$mime_filename);
		$this->mime_headers = $this->write_mimeheaders($filename, $mime_filename);
	}

	function attach_file($filename,$mimetype,$mime_filename) {
		$encoded = $this->encode_file($filename);
		if ($mime_filename) $filename = $mime_filename;
		$out = "--" . $this->mime_boundary . "\n";
		$out = $out . "Content-type: " . $mimetype . "; name=\"$filename\";\n";		
		$out = $out . "Content-Transfer-Encoding: base64\n";
		$out = $out . "Content-disposition: attachment; filename=\"$filename\"\n\n";
		$out = $out . $encoded . "\n";
		$out = $out . "--" . $this->mime_boundary . "--" . "\n";
		return $out; 
	}

	function encode_file($sourcefile) {
		if (is_readable($sourcefile)) {
			$fd = fopen($sourcefile, "r");
			$contents = fread($fd, filesize($sourcefile));
			$encoded = my_chunk_split(base64_encode($contents));
			fclose($fd);	
		}
		return $encoded;
	}

	function sendfile() {
		$headers = $this->smtp_headers . $this->mime_headers;		
		$message = $this->text_body . $this->text_encoded;
		mail($this->addr_to,$this->subject,$message,$headers);
	}

	function write_body($msgtext) {
		$out = "--" . $this->mime_boundary . "\n";
		$out = $out . "Content-Type: text/plain; charset=\"iso-8859-1\"\n\n";
		$out = $out . $msgtext . "\n";
		return $out;
	}

	function write_mimeheaders($filename, $mime_filename) {
		if ($mime_filename) $filename = $mime_filename;
		$out = "MIME-version: 1.0\n";
		$out = $out . "Content-type: multipart/mixed; ";
		$out = $out . "boundary=\"$this->mime_boundary\"\n";
		$out = $out . "Content-transfer-encoding: 7BIT\n";
		$out = $out . "X-attachments: $filename;\n\n";
		return $out;
	}

	function write_smtpheaders($addr_from) {
		$out = "From: $addr_from\n";
		$out = $out . "Reply-To: $addr_from\n";
		$out = $out . "X-Mailer: PHP3\n";
		$out = $out . "X-Sender: $addr_from\n";
		return $out;
	}
}
function my_chunk_split($str)
{
	$stmp = $str;
	$len = strlen($stmp);
	$out = "";
	while ($len > 0) {
		if ($len >= 76) {
			$out = $out . substr($stmp, 0, 76) . "\r\n";
			$stmp = substr($stmp, 76);
			$len = $len - 76;
		}
		else {
			$out = $out . $stmp . "\r\n";
			$stmp = ""; $len = 0;
		}
	}
	return $out;
}
?>
Donc les erreurs sont les suivantes:
- Le nom de la pièce-jointe change. Au lieu de "rappel.txt" j'ai "_var_www_free.fr_f_f_blackhawk363_php43m6mc.htm" (ca prends une partie de l'adresse de mon hébergeur (free.fr).
- L'extension d'un txt change en htm (du moins chez hotmail)
- Pour un gif, seul le nom du fichier change.
Merci d'avance pour vos reponses. Et désolé pour la longueur du code :s

Posté : 25 août 2005, 13:26
par crash_override
personne n'a de solution à mon problème ?