Email mit Anhang (PHP4 unter PHP5 nutzen)

messa

Grünschnabel
Hi,
habe ein Problem mit einem Kontaktscript. Unter PHP4 funktioniert es tadellos, doch unter PHP5 bekomme ich folgende Fehlermeldung:

Warning: fopen() [function.fopen]: Filename cannot be empty in /kontakt.php on line 184

Warning: fread(): supplied argument is not a valid stream resource in /kontakt.php on line 184

Warning: Cannot modify header information - headers already sent by (output started at /kontakt.php:184) in /kontakt.php on line 190

Sowie display errors:
Notice: Undefined index: Send in /kontakt.php on line 31

Anbei mal der Code:
PHP:
<?php

error_reporting(E_ALL); 
ini_set('display_errors', true);  

### Konfiguration ###

$Empfaenger = "xxx@domain.de";
$Mailbetreff    = 'Anfrage';
$strReturnhtml = 'http://www.xxx.de/ok.php';
$strDelimiter  = ":\t";
$allowedfiletype = array('pdf');
$maxfilesize = 8;

### Ende Konfiguration ###

if($_REQUEST['Send'])
{
if(empty($_REQUEST['Email']) || empty($_REQUEST['Firma']) || empty($_REQUEST['Name']) || filesize($_FILES['Anhang']['tmp_name'])/1024/1024 >= $maxfilesize) 
{

?>

(Hier kommt die Fehlermeldung)

<?php
}
else
{

$Trenner = md5(uniqid(time()));

$Header = "From: ".$_REQUEST['Email'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Nachricht erhalten: \n\n";

while(list($Formularfeld, $Wert) = each($_REQUEST))
{
if($Formularfeld != "Send" && $Formularfeld != "Anhang")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}

$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner--";

mail($Empfaenger, $Mailbetreff, "", $Header);
 header("Location: $strReturnhtml");
exit;
}
}
else
{
?>
<form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" name="Formular" >
<input name="Anhang" size="50" type="file">
<input type="submit" name="Send" value="Daten senden" class="btn">&nbsp;&nbsp;<input class="btn" type="reset">
</form>
<?php
}
?>

Hat jemand vielleicht ein Tip für mich?! Danke.
 
Hi

die Fehlermeldungen bedeuten folgendes:

Warning: fopen() [function.fopen]: Filename cannot be empty in /kontakt.php on line 184
Der erste `Parameter von fopen() ist (vermutlich) ein leerer String.

Warning: fread(): supplied argument is not a valid stream resource in /kontakt.php on line 184
Resultiert aus dem fopen Fehler.

Warning: Cannot modify header information - headers already sent by (output started at /kontakt.php:184) in /kontakt.php on line 190
Du versuchst headerinformationen (z.b. durch session_start() header() setcookie() ) zu senden, hast aber vorher schon eine Ausgabe (in Form von HTM-Code, PHP ausgaben etc).


Notice: Undefined index: Send in /kontakt.php on line 31
Du versuchst in einem Array auf den Index "Send" zuzugreifen der nicht existiert.
 
Danke für deine Tip's.

zu 1) Also müsste ich eine if abfrage schreiben, die prüft ob das Feld leer ist?!

zu 4) Versteh ich aber nicht ganz wieso der Fehler auftaucht, denn mein Submit Button hat den Namen Send?! ("name="Send")

EDIT:
zu 4) Hab den Fehler behoben musste folgenden Code erstezen. Der andere Fehler besteht immer noch :/ Ist das Script eigentlich vor Spam sicher?!
PHP:
 if(isset($_REQUEST['send']))
 
Zuletzt bearbeitet:
Hi.
zu 1) Also müsste ich eine if abfrage schreiben, die prüft ob das Feld leer ist?!
Ja.
zu 4) Versteh ich aber nicht ganz wieso der Fehler auftaucht, denn mein Submit Button hat den Namen Send?! ("name="Send")
Aber du rufst die Seite doch erstmal auf bevor du das Formular abschickst, d.h. da ist auch kein Send gesetzt.

Ich würde explizit das $_POST Array prüfen:
PHP:
if (isset($_POST['Send'])) {
  ...
} else {
  ...
}
Gruß
 
Dank dir deepthroat. Den Fehler zu 4 habe ich gelöst :) Aber kommt leider bei der Abfrage nicht weiter zu 1.
 
Mhhh nee ;) Wo soll ich es den abfragen?! Ich hab's mal per echo ausgegeben, aber bekomme nur eine "4" angezeigt?! :/
 
Mhhh nee ;) Wo soll ich es den abfragen?!
Naja, bevor du irgendwas mit der Datei machen willst. Du mußt sicherstellen, dass UPLOAD_ERR_OK drin steht.

Ich hab's mal per echo ausgegeben, aber bekomme nur eine "4" angezeigt?! :/
Die Fehlercodes findest du hier: http://www.php.net/manual/de/features.file-upload.errors.php

In dem Fall hast du den Fehler UPLOAD_ERR_NO_FILE => Wert: 4; Es wurde keine Datei hochgeladen.

Gruß
 
Ahhh cool danke für den Tip :). Gut jetzt muss ich nur noch eine Funktion schreiben, die das Formular auch "ohne" Datei abschickt :)

EDIT:
Habe jetzt eine Abfrage gemacht. Wenn kein Anhang ausgewählt ist, bekomme ich jetzt eine Mail ohne Fehler. Doch wird ein anahng mitgeschick, bekomme ich zwar auch eine Mail mit Datei, aber die Datei hat immer 0 kb?!

PHP:
if(empty($_REQUEST['Anhang']))
{
$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Header .= "\n";
$Header .= "--$Trenner--";
}
else
{
$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner--";
}
 
Zuletzt bearbeitet:
Sooo habs jetzt weitgehend umgeschieben, so dass eine Email mit Anhang ankommt. Doch nun ist ein neues Problem aufgetaucht :/ Ich bekomme nur eine Email mit Anhang ohne Text. Doch im Quellcode der Email ist der Text drin.

Habe meherere Sachen ausprobiert und denke es liegt irgendwie am Content-Type: multipart/mixed?! Jemand ein Tipp?! Danke.

Jemand ein Tipp?!

PHP:
$Trenner = md5(uniqid(time()));
	
			$Header = "From: ".$_REQUEST['email'];
			$Header .= "\r\n";
			$Header .= "MIME-Version: 1.0";
			$Header .= "\r\n";
			$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
			$Header .= "\r\n";
			$Header .= "This is a multi-part message in MIME format";
			$Header .= "\r";
			$Header .= "--$Trenner";
			$Header .= "\r\n";
			$Header .= "Content-Type: text/plain";
			$Header .= "\r";
			$Header .= "Content-Transfer-Encoding: quoted-printable";
			$Header .= "\r\n";
			$Header .= "Sie haben folgende Nachricht erhalten: \r";
			$Header .= "\r\n";

			
			while(list($Formularfeld, $Wert) = each($_REQUEST))
			{
			if($Formularfeld != "send")
			{
			$Header .= $Formularfeld.":   ".$Wert."\r";
			}
			}

			$Header .= "\rDatum/Zeit: ";
			$Header .= date("d.m.Y H:i:s");
			$Header .= "\r\n";
			$Header .= "--$Trenner";
			$Header .= "\r\n";
			$Header .= "Content-Type: ";
			$Header .= $_FILES['anhang']['type'];
			$Header .= "; name=";
			$Header .= $_FILES['anhang']['name'];
			$Header .= "\r\n";
			$Header .= "Content-Transfer-Encoding: base64";
			$Header .= "\r\n";
			$Header .= "Content-Disposition: attachment; filename=";
			$Header .= $_FILES['anhang']['name'];
			$Header .= "\r\r";
			$Dateiinhalt = file_get_contents($_FILES['anhang']['tmp_name']);
        	$Header .= chunk_split(base64_encode($Dateiinhalt),76,"\n");
			$Header .= "\r\n";
			$Header .= "--$Trenner--";	

	
			
				mail($Empfaenger, $Mailbetreff, "", $Header, "-f info@domain.de");
				 header("Location: $strReturnhtml");

Email Quellcode:
PHP:
Date: Tue, 13 Jul 2010 10:58:55 +0200
Message-Id: <E1OYbKJ-0003f5-Rj@wp066.webpack.hosteurope.de>
To: info@domain.de
Subject: Anfrage
X-PHP-Script: www.domain.de/kontakt.php for xx.xxx.xxx.xx
From: info@domain.de
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=688b7cb36699d99337b1c14128d59312
X-bounce-key: webpack.hosteurope.de;info@domain.de;1279011536;5a333436;
Envelope-To: ich@domain.de

This is a multi-part message in MIME format
 --688b7cb36699d99337b1c14128d59312
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Sie haben folgende Nachricht erhalten:

Name: Testname

Datum/Zeit: 13.07.2010 10:58:55
--688b7cb36699d99337b1c14128d59312
Content-Type: image/jpeg; name=datei.JPG
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=datei.JPG

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAsICAgJCAwJCQwRCwoLERQPDAwPFBcSEhISEhcYExQU
FBQTGBYaGxwbGhYiIiQkIiIuLi4uLjAwMDAwMDAwMDD/2wBDAQwMDBAQEBcRERcYFBMUGB4bHBwb
HiQeHh8eHiQpIyAgICAjKSYoJCQkKCYrKykpKyswMDAwMDAwMDAwMDAwMDD/wAARCADJArwDAREA
AhEBAxEB/8QAHAABAAIDAQEBAAAAAAAAAAAAAAYHAQQFAwII/8QATxAAAQMCAwMGBw0FBQcFAAAA.....
 
Zuletzt bearbeitet:
Zurück