[PHP] Mail mit anhang versenden

White

Well-known member
ID: 123940
L
20 April 2006
910
42
Ja ich möchte eine mail über mail(); versenden.
Immoment soll diese mail als anhang eine zip datei beinhalten.
dafür verwende ich den folgenden code den ich mir aus einer an mich selsbt geschickten mail abgeschaut habe.
PHP:
  $datei=$scriptdaten['dateiname'];
  $trennzeichen = strtoupper(md5(uniqid(time())));
  $fp = fopen($_SERVER['DOCUMENT_ROOT'].$pfad.$datei,"r");
  $datei_inhalt = fgets($fp);
  fclose($fp);
  $datei_inhalt = chunk_split(base64_encode($datei_inhalt));
  $mail_header='From:'.$webbymail.'
  MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="'.$trennzeichen.'"

This is a multi-part message in MIME format.

------='.$trennzeichen.'
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit

'.$nachricht.'
------='.$trennzeichen.'
Content-Type: application/x-zip-compressed;
	name="'.$datei.'"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="'.$datei.'"

'.$datei_inhalt.'

------='.$trennzeichen.'--';
  mail($userdaten['mail'],"Dein Script","",$mail_header);
  echo "mail(".$userdaten['mail'].",\"Dein Script\",$nachricht,$mail_header)";

Nunja das Problem hierbei ist.
Wenn ich nun eine mail verschicke. kommt bei mir nur eine korrupte zip datei an.
Hat jemand eine idee ?
 
ich stelle grade fest das es schon vorher hackt wenn ich versuche das noch nicht encodetete file einfach wieder so
PHP:
  $fp=fopen("test.zip","wb");
  //$test=base64_decode($datei_inhalt);
  fputs($fp,$test) ;
  fclose($fp);

zurückzuschreiben erhalte ich ein korruptes zipfile


edit:
ok nun habe ich die erste fehlerquelle raus.
die datei kann man net per fopen auslesen habs nun so gemacht
PHP:
  $datei_inhalt=file_get_contents($_SERVER['DOCUMENT_ROOT'].$pfad.$datei);
wenn ich mir das jetzt in ne datei schreiben lasse geht das zip file noch.

aber die mail ist weiterhin korrupt :-(.



OK noch ein edit:
mit diesem code
PHP:
  $datei=$scriptdaten['dateiname'];
  $trennzeichen = strtoupper(md5(uniqid(time())));
  $datei_inhalt=file_get_contents($_SERVER['DOCUMENT_ROOT'].$pfad.$datei);
  $datei_inhalt = chunk_split(base64_encode($datei_inhalt));

 $mail_header='From:'.$webbymail.'
  MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="'.$trennzeichen.'"

This is a multi-part message in MIME format.

------='.$trennzeichen.'
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit

'.$nachricht.'
------='.$trennzeichen.'
Content-Type: application/x-zip-compressed;
	name="'.$datei.'"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="'.$datei.'"

'.$datei_inhalt.'

------='.$trennzeichen.'--';
  mail($userdaten['mail'],"Dein Script","",$mail_header);
  echo "mail(".$userdaten['mail'].",\"Dein Script\",$nachricht,$mail_header)";
Bekomme ich eine mail mit einem zip archiv was zwar nicht korrupt ist also was sich öffnen lässt. jedoch ist es leer und hat eine größe von null bytes. was ich nicht verstehe denn der echo des mail befehls am ende des codes oben gibt das aus
mail(white@localhost,"Dein Script",Hier dann der text für die mail rein,From:white@crazyideas.de MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="EAD00BD2ADF339F24D2DB5586F177702" This is a multi-part message in MIME format. ------=EAD00BD2ADF339F24D2DB5586F177702 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit Hier dann der text für die mail rein ------=EAD00BD2ADF339F24D2DB5586F177702 Content-Type: application/x-zip-compressed; name="bla.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bla.zip" UEsDBBQAAAAIAJhU/jSETHHlIQEAAPUBAAAJAAAAc3R5bGUuY3NzlZBfS8MwFMWfLfQ7XPBFx7Kp cwrp01wnDmSFrYj6ImmbZtelSUnS4R/87ralm8wHQe5LuJxfzrln2IPpagWhTquCKwe9oe/dROET fPre0W20iMlq/jyjcH5RvgUwje6jJYXjUdhMALlWjuSsQPlOYWKQyT48cJMxxfpwx+WWO0zrp2XK EssN5kH9bcLSjTC6UhnBgglOoTLyJEGZcTNMxOC1FKeNrmBGoCJOlxTOanvf+/K9CZWoNm28XZrr UTMBxLPHmISzabScxPNoQUFpxTtoixYdzw643RV/cWu95eaf1MCm6/pU99IktQ3c9mTxg3dF+l6q pTY/2X2vZFmGShDJc0dhPG5Vu6VBsa63l/sW9hYFOscbi0O+U/7irzr+G1BLAQIUABQAAAAIAJhU /jSETHHlIQEAAPUBAAAJAAAAAAAAAAEAIACAgQAAAABzdHlsZS5jc3NQSwUGAAAAAAEAAQA3AAAA SAEAAAAA ------=EAD00BD2ADF339F24D2DB5586F177702--)

edit3 oder 4:
wenn ich die mail die oben geschickt wurde öffne und den quellcode anschaue sieht der so aus
Received: from spooler by localhost (Mercury/32 v4.01b); 2 Aug 2006 00:08:56 +0200
X-Envelope-To: <white@localhost>
Return-path: <white@crazyideas.de>
Received: from g21 (127.0.0.1) by localhost (Mercury/32 v4.01b) ID MG0009CA;
2 Aug 2006 00:08:52 +0200
Date: Wed, 02 Aug 2006 00:08:52 +0200
Subject: Dein Script
To: white@localhost
From:white@crazyideas.de
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="EAD00BD2ADF339F24D2DB5586F177702"
This is a multi-part message in MIME format.
------=EAD00BD2ADF339F24D2DB5586F177702
Content-Type: text/plain;
format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 7bit
Hier dann der text für die mail rein
------=EAD00BD2ADF339F24D2DB5586F177702
Content-Type: application/x-zip-compressed;
name="bla.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="bla.zip"
UEsDBBQAAAAIAJhU/jSETHHlIQEAAPUBAAAJAAAAc3R5bGUuY3NzlZBfS8MwFMWfLfQ7XPBFx7Kp
cwrp01wnDmSFrYj6ImmbZtelSUnS4R/87ralm8wHQe5LuJxfzrln2IPpagWhTquCKwe9oe/dROET
fPre0W20iMlq/jyjcH5RvgUwje6jJYXjUdhMALlWjuSsQPlOYWKQyT48cJMxxfpwx+WWO0zrp2XK
EssN5kH9bcLSjTC6UhnBgglOoTLyJEGZcTNMxOC1FKeNrmBGoCJOlxTOanvf+/K9CZWoNm28XZrr
UTMBxLPHmISzabScxPNoQUFpxTtoixYdzw643RV/cWu95eaf1MCm6/pU99IktQ3c9mTxg3dF+l6q
pTY/2X2vZFmGShDJc0dhPG5Vu6VBsa63l/sW9hYFOscbi0O+U/7irzr+G1BLAQIUABQAAAAIAJhU
/jSETHHlIQEAAPUBAAAJAAAAAAAAAAEAIACAgQAAAABzdHlsZS5jc3NQSwUGAAAAAAEAAQA3AAAA
SAEAAAAA
------=EAD00BD2ADF339F24D2DB5586F177702--
 
Zuletzt bearbeitet:
nunja wenn jemand irgend eine idee hat.
ich bin für alles dankbar.

nun gehe ich aber doch erstmal schlafen.
 
ok habe es nun es funzt allerdings nicht auf einem lokalen xampp mailserver da kommt nur leere zipfiles
PHP:
 $datei=$scriptdaten['dateiname'];
  $trennzeichen = strtoupper(md5(uniqid(time())));
  $datei_inhalt=file_get_contents($_SERVER['DOCUMENT_ROOT'].$pfad.$datei);
  $datei_inhalt = chunk_split(base64_encode($datei_inhalt));
  $lizenz_name=$lizenzdaten['ueberschrift'];
  $lizenz_inhalt=$lizenzdaten['text'];
  $lizenz_inhalt = chunk_split(base64_encode($lizenz_inhalt));

$mail_header  = "From:$webbymail\n";
$mail_header .= "MIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/mixed; boundary=$trennzeichen";
$mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";
$mail_header .= "\n--$trennzeichen";
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$nachricht";
$mail_header .= "\n--$trennzeichen";
$mail_header .= "\nContent-Type: application/octetstream; name=\"$datei\"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename=\"$datei\"";
$mail_header .= "\n\n$datei_inhalt";
$mail_header .= "\n--$trennzeichen";
$mail_header .= "\nContent-Type: application/octetstream; name=\"".$lizenz_name.".txt\"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename=\"".$lizenz_name.".txt\"";
$mail_header .= "\n\n$lizenz_inhalt";
$mail_header .= "\n--$trennzeichen--";
$mail=mail($userdaten['mail'],"Dein Script",$nachricht,$mail_header);

@mods kann das jemand zu den faqs schieben ?
 
das deine zip-file corrupt ist, ist absolut korrekt.
wenn du mit fgets daten einliest, genügt es eben "nicht" einfach nur fgets($fp) zu schreiben. ein blick ins manual lüftet aber bereits im "ersten" beispiel wie man den befehl verwendet. in diesem sinne rtfm!

https://php.net/fgets
 
Scar schrieb:
ein blick ins manual lüftet aber bereits im "ersten" beispiel wie man den befehl verwendet.
...
Anmerkung: Der Parameter length wurde in PHP 4.2.0 optional. Ist er nicht angegeben, wird als Zeilenlänge 1024 angenommen. Seit PHP 4.3 wird bei einem fehlenden Parameter length so lange gelesen, bis das Ende der Zeile erreicht ist. Ist der Großteil der Zeilen in der Datei größer als 8 kB, ist es effizienter, wenn Sie die maximale Zeilenlänge spezifizieren.
 
optional hin oder her, es funktioniert nunmal nicht. mit dem beispiel sollte es aber nunmal gehn. also lohnt es durchaus die beispiele zu testen.