• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Dateianhänge (mit Sonderzeichen) können nicht geöffnet werden?

jobo218

Mitglied
Hallo!
Es geht nicht um das gleiche Formular, mit dem ich euch in dem anderen Thread gequält habe, keine Sorge :)

Ist eigentlich bloß eine kurze Verständnisfrage.

Ich habe ein HTML-Formular mit einem Dateianhangsfeld,

Musste das PHP einer fremden Quelle entnehmen, da ich mich mit der Dateianhangsverarbeitung für den Maliversand nicht auskenne. Habe dabei recht viel unterschiedliches gesehen, mit folgendem hat es nun aber ganz gut funktioniert.

Das Problem ist nur, dass nur jeder zweite Anhang in der Email (und auch wenn man es dann abspeichert) geöffnet werden kann (Fehlermeldung, Datei sei beschädigt/nicht vollständig). Ich habe festgestellt dass dies hauptsächlich der Fall ist, wenn
1) der Dateinahme entweder Leerzeichen oder Sonderzeichen/Umlaute enthält
2) Die Dateiendung "versteckt" ist. (Zumindest beim Mac geht das, dass die Dateiendung nicht am Dateinamen angehängt ist)

Meine Frage nun; Muss man den Dateinamen oder so noch kodieren / verändern, oder hat das möglicherweise eine andere Ursache?

Danke!

PHP:
$an = '..';
$betreff = "...";
$emailnachricht = '....';

$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
$filename = $_FILES['file']['name'];
$boundary =md5(date('r', time()));
$headers = "From: [email protected]\r\nReply-To: [email protected]";
$headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\"";
$message="This is a multi-part message in MIME format.

--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"
--_2_$boundary
Content-Type: text/html; charset=\"UTF-8\"
Content-Transfer-Encoding: 7bit

$emailnachricht

--_2_$boundary--
--_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

$attachment
--_1_$boundary--";

mail($an, $betreff, $message, $headers);
 
Ich verzichte grundsätzlich auf Sonder- und Leerzeichen in Dateinamen. Kann man es nicht auschließen, konvertiere ich diese Zeichen.
Und noch ein Tipp: verzichte besser auf die Mail-Funktion von PHP und benutze besser eine fertige Klasse w.z.B. den phpMailer
 
Die Dateien werden ja vom Besucher hochgeladen deshalb habe ich keinen Einfluss auf die Dateinamen.
Habe jetzt mit

Code:
$ers = array(

        ' ' => '_',
        'Ä' => 'Ae',
        'Ö' => 'Oe',
        'Ü' => 'Ue',
        'ä' => 'ae',
        'ö' => 'oe',
        'ü' => 'ue',
        'ß' => 'ss',
        'JPG' => 'jpg',
        '(' => '',
        ')' => '',
        '-' => '_',

);

    $dateiname = strtr($filename,$ers);

alle Sonderzeichen ersetzt, trotzdem können bspw. PDF und .doc Dateien nicht geöffnet werden. Beim .doc-Öffnen stehen nur 10000 komische Zeichen da und bei den PDF kommt die Fehlermeldung, die Datei sei beschädigt.
 
Überprüfe erst einmal, ob die Datei schon nach dem Upload beschädigt ist, also eine Datei einfach mal per FTP wieder downloaden und prüfen. Wenn die Datei nicht beschädigt ist, solltest du den Tipp mit dem phpMailer beachten. ;)
 
Ja das hat vielleicht nicht so viel Sinn :)

Überprüfe erst einmal, ob die Datei schon nach dem Upload beschädigt ist, also eine Datei einfach mal per FTP wieder downloaden und prüfen. Wenn die Datei nicht beschädigt ist, solltest du den Tipp mit dem phpMailer beachten. ;)

Die Datei wird ja nicht per FTP hochgeladen, sondern direkt per Mail mit versandt.
 
Aber die Datei ist auf dem Server OK??? Das soll ja nur ein Test sein, ob beim Upload schon was schief läuft. Auch schon mal $_FILES['name'][error] geprüft
 
$_FILES['name'][error] gibt stets 0 zurück, habe es mehrfach mit verschiedenen Dateitypen getestet.
Bei .jpg und .png geht es, ansonsten kommt bei bspw. .doc(x) folgende Meldung
Bildschirmfoto 2015-02-09 um 15.57.59.png
 
Zurück
Oben