Zum Inhalt springen

PHP-attachement versenden


Empfohlene Beiträge

Moinsen !

Ich möchte via PHP einemail mit Attachement (z.B. Bild) versenden.

Ein User gibt in einem Formular Zieladresse, Betreff, Text, Dateianhang etc ein und kann diese mail dann verschicken.

Hier erstmal mein HTML-Formular:


<html>

<head>

<title>main</title>

</head>

<body bgcolor=#000000 text=#00FF00>

<form action="attachement001.php" enctype=multipart/form-data method="post">

<table>

<tr>

<td>Zieladresse:</td>

<td><input type="text" name="ziel"></td>

</tr>

<tr>

<td>Absender:</td>

<td><input type="text" name="sender"></td>

</tr>

<tr>

<td>Betreff:</td>

<td><input type="text" name="headline"></td>

</tr>

<tr>

<td>Text:</td>

<td><textarea name="palaver" rows="13" cols="51" wrap="physical">

</textarea></td>

</tr>

<tr>

<td><input type=file name=datei></td>

</tr>

</table>

<br><br>

<input type="reset" value="Eingaben verwerfen">

<br><br>

<input type="submit" value="Daten senden">

</form>

<br>

</body>

</html>
Das ist ja soweit alles klar. Hier nun mein eigentliches PHP-Skript (attachement001.php):

<?php

$grenze="grenzlinie";

$name_des_bildes=$HTTP_POST_FILES['datei']['name'];

$headers ="MIME-Version: 1.0\r\n";

$headers.="From: $sender\n";

$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";

$botschaft<I></I>="\n--$grenze\n";

$botschaft.="Content-transfer-encoding: 7BIT\r\n";

$botschaft.="Content-type: text/plain\n\n";

$botschaft.= "$palaver\n";

$botschaft.="\n\n";

$botschaft.="\n--$grenze\n";

$botschaft.="Content-Type: application/octetstream;\n\tname=$name_des_bildes\n";

$botschaft.="Content-Transfer-Encoding: base64\n";

$botschaft.="Content-Disposition: attachment;\n\tfilename=$name_des_bildes\n\n";

$handle=fopen("$datei","rb");

$inhalt_der_datei=fread($handle,filesize("$datei"));

fclose($handle);

$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));

$botschaft.=$inhalt_der_datei;

$botschaft.="\n\n";

$botschaft.="--$grenze";

mail("$ziel","$headline",$botschaft,$headers);

print "email wurde versandt";

?>

Aber irgendwie haut das nicht hin.

Ich kann im Formular alle Sachen eingeben, wenn ich dann aber auf 'Daten sende' klicke, kommt ein Fortschrittsbalken, der ewig braucht ohne daß die mail letztendlich versendet wird.

Kann mir jemand sagen wo der Fehler steckt ?

Unklar ist mir vor allem folgendes:

Was hat es mit der zweiten Zeile:

$name_des_bildes=$HTTP_POST_FILES['datei']['name'];

auf sich ?

Mir wurde gesagt, daß ich diese noch einfügen müßte.Was das bewirkt, weiß ich aber absolut net.

Dann noch das:

Im Formular wird ja ein Dateianhang ausgewählt.Dieser trägt den Namen 'datei', also im PHP-Skript den Variablennamen $datei.

Ist das nun nur der Name der Datei oder der Pfad ?

Gleiches bei '$name_des_bildes'.

Und wenn es sich um einen Pfad handelt:Wie gibt man den Pfad denn an ?

C:\test.jpg oder C:/test.jpg ?

Ist ne Menge Holz; ich bin für jegliche Hilfe dankbar.

Thx and greetz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

- was steht bei upload_max_filesize in deiner phpinfo?

- hast du upload_tmp_dir definiert + hast du schreibrechte in diesem verzeichnis? ['name'] ist nämlich der dateiname, der im temporären verz. angelegt wird.

- was steht bei smtp, smtp_port, und sendmail_path dort?

- hast dus schon mal geschafft, ein mail nur mit mail(...) ohne die restlichen headerzeilen zu versenden?

Was hat es mit der zweiten Zeile:

$name_des_bildes=$HTTP_POST_FILES['datei']['name'];

auf sich ?

das mehrdimensionale (?) array ['datei'] enthält neben 'name' noch 'type', 'size', 'tmp_name' (siehe auch im php-manual), also alle infos zum inhalt des uploads aus deinem form:

<form action="attachement001.php" enctype=multipart/form-data method="post">

C:\test.jpg oder C:/test.jpg ?

ist m.w. bei php auf windows egal, kann ich aber nicht bestätigen.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moinsen !

Hier mal ein paar weitere Infos:

Unter upload_max_filesize steht 2M (mein Beispielbild hatte eine Größe von 1.591kb)

Die upload_tem_dir habe ich nicht selbst definiert (ich wüßte aber auch nicht wie); es ist da 'no value' vermerkt.

SMTP : localhost

SMTP_port : 25

sendmail_path : /usr/sbin/sendmail -t-i

Normale mails ohne attachements konnte ich ganz locker mit

mail($ziel, $headline, $palaver, "FROM: $sender")

versenden.

Thx and greetz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moinsen !

Ich habe mein PHP-Skript mimnimal abgeändert.


<?php

$grenze="grenzlinie";

$name_des_bildes=$HTTP_POST_FILES['datei']['name']['type']['size'];

$headers="MIME-Version: 1.0\r\n";

$headers.="From: $sender\n";

$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";

$botschaft="\n--$grenze\n";

$botschaft.="Content-transfer-encoding: 7BIT\r\n";

$botschaft.="Content-type: text/plain\n\n";

$botschaft.="$palaver\n";

$botschaft.="\n\n";

$botschaft.="\n--$grenze\n";

$botschaft.="Content-Type: application/octetstream;\n\tname=$name_des_bildes\n";

$botschaft.="Content-Transfer-Encoding: base64\n";

$botschaft.="Content-Disposition: attachment;\n\tfilename=$name_des_bildes\n\n";

$zeiger_auf_datei=fopen("$datei","rb");

$inhalt_der_datei=fread($zeiger_auf_datei,filesize("$datei"));

fclose($zeiger_auf_datei);

$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));

$botschaft.=$inhalt_der_datei;

$botschaft.="\n\n";

$botschaft.="--$grenze";

mail($ziel,$headline,$botschaft,$headers);

echo("email wurde versandt");

?>

Die mail wird nun versandt.Betreff sowie der geschriebene Text sind genau wie Absender und Empfänger korrekt dargestellt.

Ich habe ein 1.591kb großes jpg-Bild mitgesandt.Der Empfänger kann auch sehen, daß ein Anhang mitversandt wurde.Dieser hat aber fälschlicherweise eine Größe von Null kb und läßt sich auch nicht öffnen.

Nach dem Ausfüllen des Formulars und des Abschickens der Daten, dauert der Versand ziemlich lange.Letztendlich kommt dann folgende Meldung:

"Warning: fopen(): open_basedir restriction in effect. File(/tmp/phpGbPOFA) is not within the allowed path(s): (/usr/local/apache/htdocs) in /usr/local/apache/htdocs/k9045/testus01/attachement002.php on line 16

Warning: fopen(/tmp/phpGbPOFA): failed to open stream: Operation not permitted in /usr/local/apache/htdocs/k9045/testus01/attachement002.php on line 16

Warning: filesize(): open_basedir restriction in effect. File(/tmp/phpGbPOFA) is not within the allowed path(s): (/usr/local/apache/htdocs) in /usr/local/apache/htdocs/k9045/testus01/attachement002.php on line 17

Warning: fread(): supplied argument is not a valid stream resource in /usr/local/apache/htdocs/k9045/testus01/attachement002.php on line 17

Warning: fclose(): supplied argument is not a valid stream resource in /usr/local/apache/htdocs/k9045/testus01/attachement002.php on line 18

email wurde versandt"

Kann mir jemand sagen, was da am Skript falsch ist?

Thx and greetz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

versuch mal, in einer dir zugänglichen konfigurationsdatei, den temporären speicherpfad der upgeloadeten datei einzutragen.

php_admin_value open_basedir /tmp/blabla

die sogenannte open_basedir-einschränkung hindert dich zwar nicht, dateien raufzuladen, aber sie dann aus dem temporären verzeichnis ausserhalb deines heimatverzeichnisses (oder webroots) zu lesen.

edit: übrigens kannst du mit php_admin_value fast beliebige serverseitige name/wert-paare definieren, die dann auch in deiner phpinfo aufscheinen sollten.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moinsen !

Irgendwie scheint es meinen WebSpace-Anbieter zerrissen zu haben.Nicht nur daß meine WebSite nicht erreichbar ist, selbst die HomePage meines Anbieters 100mb4free.de ist nicht mehr anwählbar.

Mails an den support wurden auch noch nicht beantwortet.Nun gut, warte ich mal was da noch so kommt.

Greetz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...