Mail-Script: PDF Anhang nur 297 Byte groß?

Radhad

Erfahrenes Mitglied
Hallo zusammen,

in meinem MailScript verschicke ich Mails an mehrere Freunde, wie eine Art Newsletter. Der optional kann eine Datei angehangen werden. Allerdings wird die PDF Datei mit einer Größe von knapp 1,4 MB beim senden mit einer Größe von 293 Byte empfangen. Ich verzweifle mittlerweile daran. Ich hoffe auf Hilfen wie man PDF's verschickt oder ob man die Datei nochmal decoden muss oder so!?

Hier mal der Code zum versenden:
PHP:
<?php
	/* Hier wird die Schriftart definiert, die anvielen Stellen verwendet wird */
	$FONT = "<FONT SIZE=2 FACE=\"Verdana, Arial, Helvetica\">";

	/*
	  Das Array $contenttypes dient zur identifizierung des MIME-Typs des Anhanges.
	  Es beinhaltet den MIME-Typ, die Codierung und eine Beschreibung dazu. Die
	  Codierung ist hierbei sehr wichtig, da binaere Daten im base64-Format versendet
	  werden muessen (siehe http://www.php3-forum.de/mime_mail.htm)
	*/
	$contenttypes = array(
		"text/plain"			=> array("encoding"=>"8bit"  ,"info"=>"purer Text"),
		"text/html"			=> array("encoding"=>"8bit"  ,"info"=>"HTML-Dokument"),
		"application/pdf"               => array("encoding"=>"8bit"  ,"info"=>"PDF-Dokument"),
		"image/gif"			=> array("encoding"=>"base64","info"=>"Bild: GIF"),
		"image/jpeg"			=> array("encoding"=>"base64","info"=>"Bild: JPEG"),
		"image/png"			=> array("encoding"=>"base64","info"=>"Bild: PNG"),
		"application/x-zip-compressed"	=> array("encoding"=>"base64","info"=>"Komprimiert: ZIP"),
		"application/x-gzip"		=> array("encoding"=>"base64","info"=>"Komprimiert: GZ"),
		"application/x-tar"		=> array("encoding"=>"base64","info"=>"Komprimiert: TAR")
	);
?>
<!-- Quellcode vom PHP-Beispiel: http://www.php3-forum.de/ -->
<HTML>
<HEAD>
<TITLE>eMail-senden</TITLE>
<BODY>
<?php
if(!isset($_GET["action"]))
	$choice = 2;
else
	$choice = $_GET["action"];

switch($choice)
{
  case 1:
  {
    if($_POST["email"]) {
      $inhalt = $_POST["email"].";".$_POST["betreff"].";".$_POST["anhang"].";".$_POST["dateiname"].";".$_POST["anhang_content_type"].";".$_POST["content_type"];
      $fp = fopen("data.csv","w");
      fwrite($fp,$inhalt);
      fclose($fp);
    }

    if($_POST["nachricht"])
    {
      $fp = fopen("text.txt","w");
      fwrite($fp,$_POST["nachricht"]);
      fclose($fp);
    }

    $file = fopen("text.txt","r");
    $nachricht= fread($file, filesize ("text.txt"));
    fclose($file);
    
    $handle = fopen("data.csv", "r");
    $data = fgetcsv ($handle, 1000, ";");
    fclose($handle);

    if(!isset($_GET["counterstart"]) && !isset($_GET["counterend"])) {
      $j=1;
      $k=5;
    }
    else {
      $j = $_GET["counterstart"];
      $k = $_GET["counterend"];
    }
    ini_set("SMTP","mail.trinedy.de");
    include("dbconnection.php");

    $query="SELECT COUNT(ID) FROM mails;";
    $result=mysql_query($query);
    $i=mysql_fetch_array($result);

    if($k>$i["COUNT(ID)"])
      $k=$i["COUNT(ID)"];

    for($j;$j<=$k;$j++) {
      $query="SELECT Anrede, Name, eMail FROM mails WHERE ID = $j;";
      $result=mysql_query($query) or die(mysql_error());
      $row = mysql_fetch_array($result);
  
      if($row["Anrede"] == "Frau") {
        $anrede='Sehr geehrte Frau';
      }
      else {
        $anrede='Sehr geehrter Herr';
      }

      echo $FONT;

      /* pruefe, ob ein Absender und ein Mail-Inhalt eingegeben wurde */
      if($data[1] && $nachricht) {

        /* Beginne den Mail-Header mit der Definition des Absenders */
        $mail_header = "From: $data[0]";

        /* Wenn eine Datei als Anhang ausgewaelt wurde... */
        if($data[2]=="jep" && $data[3] && $data[3] != "") {

        /* Lese die temporaere Datei, die der Benutzer hochgeladen hat aus */
        $datei_content = fread(fopen($data[3],"r"),filesize($data[3]));

        /* Codiere Datei ins BASE64-Format, falls noetig */
        if($contenttypes[$data[4]][encoding]=="base64") $datei_content = chunk_split(base64_encode($datei_content));
        else $datei_content = $datei_content;

        /* Generiere einen Boundary */
        $boundary = strtoupper(md5(uniqid(time())));

        /* Beginne den Mail-Header mit MIME-Mail-Header */
        /* (siehe http://www.php3-forum.de/mime_mail.htm) */
        $mail_header .= "\nMIME-Version: 1.0";
        $mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
        $mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";

        /* Hier faengt der normale Mail-Text an */
        $mail_header .= "\n--$boundary";
        $mail_header .= "\nContent-Type: $data[5]";
        $mail_header .= "\nContent-Transfer-Encoding: 8bit";
        $mail_header .= "\n\n$anrede ".$row["Name"].",\n\n$nachricht";

        /* Hier faengt der Datei-Anhang an */
        $mail_header .= "\n--$boundary";
        $mail_header .= "\nContent-Type: $data[4]; name=\"$data[3]\"";

        /* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
        $mail_header .= "\nContent-Transfer-Encoding: ".$contenttypes[$data[4]][encoding];
        $mail_header .= "\nContent-Disposition: attachment; filename=\"$data[3]\"";
        $mail_header .= "\n\n$datei_content";

        /* Gibt das Ende der eMail aus */
        $mail_header .= "\n--$boundary--";
      }
      else {
        $mail_header .= "\nContent-Type: $data[5]";
        $mail_header .= "\nContent-Transfer-Encoding: 8bit";
        $mail_header .= "\n\n$anrede ".$row["Name"].",\n\n$nachricht";
      }

      /* Sende eMail und gebe Fehler bzw. Bestaetigung aus */
      if(@mail($row["eMail"],$data[1],"",$mail_header)) echo "<font color=\"#00CC00\">Die eMail mit dem Betreff ".htmlentities($data[1])." wurde an ".htmlentities($row["Name"])." gesendet.</font> $j $k ".$i["COUNT(ID)"]."<br>";
      else echo "<font color=\"#CC0000\">Es ist ein Fehler beim senden der eMail an aufgetreten.</font><br>";
    }
    if($k!=$i["COUNT(ID)"]) {
      $k=$k+5;
      if($k>$i["COUNT(ID)"]) {
        $k=$i["COUNT(ID)"];
      }
      echo "<META HTTP-EQUIV=Refresh CONTENT=\"5; URL=email.php?action=$action&counterstart=$j&counterend=$k\">";
    }
  }
  break;
  }
  case 2:
  {
    echo "<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
    <FORM METHOD=post ENCTYPE=\"multipart/form-data\" ACTION=\"email.php?action=1\">
    <TR><TD>$FONT<B>Von:&nbsp;</TD><TD><INPUT TYPE=text SIZE=40 NAME=email></TD></TR>
    <TR><TD>$FONT<B>Betreff:&nbsp;</TD><TD><INPUT TYPE=text SIZE=40 NAME=betreff></TD></TR>
    <TR><TD>$FONT<B>Inhaltstyp:&nbsp;</TD><TD><SELECT NAME=content_type><OPTION VALUE=\"text/plain\">Standard: Text<OPTION VALUE=\"text/html\">HTML-Mail</SELECT></TD></TR>
    <TR><TD COLSPAN=2>$FONT<B>Folgender Text wird in der eMail versendet:&nbsp;</TD></TR>
    <TR><TD COLSPAN=2><TEXTAREA NAME=nachricht COLS=\"60\" ROWS=\"10\"></TEXTAREA></TD></TR>
    <TR><TD>$FONT<BR><B><INPUT TYPE=checkbox NAME=anhang VALUE=\"jep\">Anhang:&nbsp;</TD><TD></TD></TR>
    <TR><TD>$FONT Dateiname in Mail:&nbsp;</TD><TD><INPUT TYPE=text SIZE=20 NAME=dateiname></TD></TR>
    <TR><TD>$FONT Inhaltstyp:&nbsp;</TD><TD><SELECT NAME=anhang_content_type>";

    /*
    Lese aus dem Array $contenttypes mit den MIME-Typen die Daten aus und
    generiere eine Drop-Down-Liste
    */
    reset($contenttypes);
    $key=key($contenttypes);
    while($key != "" || $key=="0") {
      echo "<OPTION VALUE=\"$key\">".$contenttypes[$key][info];
      next($contenttypes);
      $key=key($contenttypes);
    }
    ?>
    </SELECT></TD></TR>
    <TR><TD><?php echo $FONT; ?></TD><TD><?php echo $FONT; ?><INPUT TYPE=submit VALUE="Abschicken"></TD></TR>
    </FORM></TABLE>
    </FONT>
    <?php
  }
  break;
}
?>
</BODY>
</HTML>

MfG Radhad
 
ich habe es jetzt gelöst (endlich). Fragt mich nicht wieso das mal in einer Version lief mit base64 und dann wieder nicht. Aber eine PDF Datei muss definitiv mit base64 codiert werden!

Wer das dort oben ersetzt und sich den Part klaut kann damit viel machen! Es ist sogar so ausgelegt den ganzen Quelltext auf 2 Dateien zu verteilen! Einfach den switch aufteilen ;-)

Danke nochmals für die Hilfe!


MfG Radhad
 
Zurück