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é:</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è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
Alors j'ai reussi, à l'aide d'un autre script, à envoyer une pièce-jointe.Voici le script et le formulaire utilisé:
Le formulaire:
[php] <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é:</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ès basse
</select> <input type="submit" value="Envoyer"></div>
</td>
</tr>
</table>
</form>
</body>
</html>[/php]
Le script:
[php]<?
/* 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();
?>[/php]
Le require:
[php]<?
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;
}
?>[/php]
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