pdf-dateianhang bei mail
Stefan
- php
in meinem script (formular) kann ich zip und pdf dateien uploaden und als dateianhang in der mail mitsenden.
wenn die mail dann ankommt, kann ich ohne probleme den dateianhang mit der zip-datei öffnen.
bei der pdf-datei (mailanhang) bekomme ich aber folgende fehlermeldung:
There was an error opening this document. The file is damaged and could not be rapaired.
da ich nun schon eine zeitlange versuche den grund zu finden, hoffe ich, dass mir hier jemand den grund für diese fehlermeldung geben kann.
was könnte hier verkehrt sein. wie gesagt, die mail mit pdf-anhang kommt an, lässt sich aber nicht mehr öffnen.
DANKE !
stefan
Halihallo Stefan
[...]
Dein Acrobat ist im Eimer, oder du hast einen Programmierfehler in einem Code, den du
uns vorenthälst.
Viele Grüsse
Philipp
Ich kenne das mit der Codierung von Mails mit Anhängen die meist über mehrere Plattformen laufen. Ungepackte Dateien sind bei der Übertragung von MAC <-> PC meist zerschossen (und nicht nur wegen der Ressource Fork auf MAC). Je nach dem wie die Codierung auf dem PHP-Server läuft kann das ja vielleicht daran liegen?
Frank
in meinem script (formular) kann ich zip und pdf dateien uploaden und als dateianhang in der mail mitsenden.
wenn die mail dann ankommt, kann ich ohne probleme den dateianhang mit der zip-datei öffnen.
bei der pdf-datei (mailanhang) bekomme ich aber folgende fehlermeldung:
There was an error opening this document. The file is damaged and could not be rapaired.da ich nun schon eine zeitlange versuche den grund zu finden, hoffe ich, dass mir hier jemand den grund für diese fehlermeldung geben kann.
was könnte hier verkehrt sein. wie gesagt, die mail mit pdf-anhang kommt an, lässt sich aber nicht mehr öffnen.
DANKE !
stefan
zuerst VIELEN DANK für die schnelle antwort!!!
mein acrobat dürfte keinen fehler haben, da ich ja pdf`s direkt von der festplatte ansehen kann. der fehler kommt nur, wenn ich mir eine mail mit pdf-anhang sende.
folgende script-teile sind für den upload und das versenden zuständig.
array anlegen für select-feld im formular und für email-versand:
################################################################
$contenttypes = array(
"application/pdf" => array("encoding"=>"8bit","info"=>"PDF-Datei"),
"application/x-zip-compressed" => array("encoding"=>"base64","info"=>"Komprimiert: ZIP")
);
EMAIL-FORMULAR:
###############
<td class="ptxt"><!--<INPUT TYPE=checkbox NAME=anhang VALUE="jep">Anhang: --><input type="hidden" name="MAX_FILE_SIZE" value="300000"><INPUT TYPE=file SIZE=20 NAME=datei class="kontakt"></td>
</tr>
<tr>
<td height="50"> </td>
<td>Bitte senden Sie uns nur komprimierte Zipdateien
<SELECT NAME=anhang_content_type>
<?
/*
Lese aus dem Array $contenttypes mit den MIME-Typen die Daten aus und
generiere eine Drop-Down-Liste
*/
################################################################################################################
# nachfolgende script-zeilen freigeben, wenn verschiedene datei-formate zum uploaden freigegeben werden sollen.
# im augenblick ist nur zip-datei freigegeben!
################################################################################################################
reset($contenttypes);
$key=key($contenttypes);
while($key != "" || $key=="0") {
echo "<OPTION VALUE="$key">".$contenttypes[$key][info];
next($contenttypes);
$key=key($contenttypes);
}
?>
</SELECT>
MAIL-php
########
/* Codiere Datei ins BASE64-Format, falls noetig */
if($contenttypes[$anhang_content_type][encoding]=="base64") $datei_content = chunk_split(base64_encode($datei_content));
else $datei_content = $datei_content;
/* Hier faengt der Datei-Anhang an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: $anhang_content_type; name="$dateiname"";
/* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
$mail_header .= "\nContent-Transfer-Encoding: ".$contenttypes[$anhang_content_type][encoding];
$mail_header .= "\nContent-Disposition: attachment; filename="$dateiname"";
$mail_header .= "\n\n$datei_content";
Halihallo StefanMuenchen
$contenttypes = array(
"application/pdf" => array("encoding"=>"8bit","info"=>"PDF-Datei"),
"application/x-zip-compressed" => array("encoding"=>"base64","info"=>"Komprimiert: ZIP")
);
Nix da, application/pdf will auch base64 kodiert werden.
/* Codiere Datei ins BASE64-Format, falls noetig */
if($contenttypes[$anhang_content_type][encoding]=="base64") $datei_content = chunk_split(base64_encode($datei_content));
else $datei_content = $datei_content;
Tja, hier ist der Fehler...
Versuch die base64 Kodierung und staune (hoffentlich) :-)
Viele Grüsse
Philipp
hallo philipp,
leider hatte ich das:
"application/x-zip-compressed" => array("encoding"=>"base64","info"=>"Komprimiert: ZIP")
schon versucht !!!!
ergebnis ist, dass überhaupt keine mail ankommt, nicht einmal mit einer zerstörten pdf-dateianhang.
:-(((
mit bit8 kam wenigstens die mail an.
habe auch (obwohl föllig unsinnig) sogar schon höhere bit-werte angeben.
muss doch irgendwie gehen.
DANKE für die HILFE
stefan
Halihallo StefanMuenchen
[...]
a) Ignoriere deine Encoding-Tabelle, setzte einfach base64 als default-Encoding.
b) ersetze \n durch \r\n (Zeilenumbruch ist _immer_ CRLF!)
c) Überprüfe den Mail_quelltext_ in deinem Mail-Client oder gibt ihn zu Testzwecken
in eine Datei aus.
c1)Vergleiche diesen ggf. mit einem Testmail, welches du manuell über dein Mailprogramm
versendest.
Viele Grüsse
Philipp
hi philipp,
danke, du bist der einzig im ganzen WWW der sich um dieses prob kümmert :-))))))
ok das mit \n und \r\n könnte ich im quell-text ändern. aber, wieso geht dies dann mit zip-datei-anhang absolut einwandfrei????
macht doch irgendwie keinen sinn - oder?
jetzt mal eine ganz dumme frage - mir kommen ja schon jetzt die unmöglichsten ideen, da ja alles schon versucht wurde.
könnte es sein, dass php selber oder / und der mail-server keine pdf-dateien als anhang akzeptiert?
müsste dies nicht irgendwo konfiguriert werden?
DANKE
stefan
Halihallo StefanMuenchen
danke, du bist der einzig im ganzen WWW der sich um dieses prob kümmert :-))))))
wenn du "dieses" durch "meines" änderst, hast du vielleicht recht, ja :-)
ok das mit \n und \r\n könnte ich im quell-text ändern. aber, wieso geht dies dann mit zip-datei-anhang absolut einwandfrei????
Nun, die meisten Mail-Client's kommen auch gut mit \n zurecht, nur ist es eben nicht
so wie es sein sollte. Du fragst dich, warum dies bei zip-Dateien funktioniert? - Nun,
in base64 werden die \n sowie \r\n oder \r's, wie auch alles andere kodiert, es besteht
also absolut keine Möglichkeit auf Seiten des Clients, dies falsch oder anders zu
verstehen. Zudem: Es wird auch mit .pdf so gehen (irgendwo hast'e eben noch ein Fehler).
jetzt mal eine ganz dumme frage - mir kommen ja schon jetzt die unmöglichsten ideen, da ja alles schon versucht wurde.
Ich geb dir einen Rat: Schiess das Script in den Wind und beginne von vorne! (solange
das Script noch keine 20A4 Seiten gross ist...) Das hilft meistens...
könnte es sein, dass php selber oder / und der mail-server keine pdf-dateien als anhang akzeptiert?
müsste dies nicht irgendwo konfiguriert werden?
Nö, nö, ist sehr, sehr unwahrscheinlich.
Hast du meine Ratschläge befolgt und den generierten Mailsource in eine Datei
geschrieben? - Hast du es mit einem manuellen E-Mail verglichen?
Stelle sicher, dass die .pdf (ist ja ein Upload, oder?) _richtig_ beim Script ankommt,
speichere es gleich zu beginn und versuche die Datei noch vor dem versenden normal
über Acrobat zu lesen (könnte ja sein, dass das Mailing ganz gut funktionieren würde,
die Datei jedoch schon korrupt ankommt, oder?).
Viele Grüsse
Philipp
hi philipp,
also die pdf ist auf alle fälle in ordnung, wurde geprüft.
nun habe ich hier auch nochmals nachgeforscht und bin auf folgendes gestossen. in phpinfo()
["HTTP_ACCEPT"], text/html,text/plain,application/pdf,application/x-shockwave-flash,application/vnd
hier ist pdf defeniert. in meinem allerdings nicht. deshalb die frage, ob es daran liegen könnte.
wäre echt super, wenn du dich nochmals melden würdest.
wenn das alles nichts hilft, werde ich morgen ein total nacktes mail und upload script machen, welches nur pdf mitsenden soll. mal sehen, ob es dann funktioniert.
:-)
stefan
Halihallo StefanMuenchen
also die pdf ist auf alle fälle in ordnung, wurde geprüft.
Tja, dann wär das ja schon mal ausgeschlossen... ;)
nun habe ich hier auch nochmals nachgeforscht und bin auf folgendes gestossen. in phpinfo()
["HTTP_ACCEPT"], text/html,text/plain,application/pdf,application/x-shockwave-flash,application/vnd
hier ist pdf defeniert. in meinem allerdings nicht. deshalb die frage, ob es daran liegen könnte.
Nö, das heisst nur, dass dein Browser die Information nicht mitsendet, dass er auch
PDF's anzeigen kann (oder aber es ist wirklich kein Acrobat oder anderer Reader
installiert). Aber das hat keinen Einfluss auf das versenden der E-Mail.
Viele Grüsse
Philipp
Halihallo StefanMuenchen
<td class="ptxt"><!--<INPUT TYPE=checkbox NAME=anhang VALUE="jep">Anhang: --><input type="hidden" name="MAX_FILE_SIZE" value="300000"><INPUT TYPE=file SIZE=20 NAME=datei class="kontakt"></td>
<SELECT NAME=anhang_content_type>
anhang_content_type sollte in " geschrieben sein: <select name="anhang_content_type">
wie alle Attribute.
/* Codiere Datei ins BASE64-Format, falls noetig */
if($contenttypes[$anhang_content_type][encoding]=="base64") $datei_content = chunk_split(base64_encode($datei_content));
else $datei_content = $datei_content;
Hast du dir hier $anhang_content_type schon mal ausgeben lassen? - Ist es wirklich mit
dem korrekten MIME-Typen gefüllt? - Hast du jetzt mal versucht, _alles_ mit base64
kodieren zu lassen? - Was steht in $datei_content (wirklich der "source" der PDF-Datei)?
Viele Grüsse
Philipp