php mail mit anhang ist zu groß?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php mail mit anhang ist zu groß?

    ich habe mir ein kleines script gebastelt welches eine meil versendet mit einem anhang. wenn der anhang nur 3KB groß ist funktioniert alles wunderbar, aber wenn ich den anhang 500KB groß mache sendet er irgend wie nicht mehr.

    hier mal der code

    Code:
    <?php
    
    
    
    
    $AbsenderMail = $AbsenderName.'@web.de';
    $Betreff = 'betreff'; 
    $text = 'hallo';
    $Header = "From: ".$AbsenderName." <".$AbsenderMail.">"; 
    
    
    
    $Dateiname = "anhang.zip"; 
    $DateinameMail = "anhang.zip"; 
    
    $Trenner = md5(uniqid(time())); 
    $Header .= "\n"; 
    $Header .= "MIME-Version: 1.0"; 
    $Header .= "\n"; 
    $Header .= "Content-Type: multipart/mixed; boundary=$Trenner"; 
    $Header .= "\n\n"; 
    $Header .= "This is a multi-part message in MIME format"; 
    $Header .= "\n"; 
    $Header .= "--$Trenner"; 
    $Header .= "\n"; 
    $Header .= "Content-Type: text/plain"; 
    $Header .= "\n"; 
    $Header .= "Content-Transfer-Encoding: 8bit"; 
    $Header .= "\n\n"; 
    $Header .= $text; 
    $Header .= "\n"; 
    $Header .= "--$Trenner"; 
    $Header .= "\n"; 
    $Header .= "Content-Type: application/x-zip-compressed; name=$DateinameMail"; 
    $Header .= "\n"; 
    $Header .= "Content-Transfer-Encoding: base64"; 
    $Header .= "\n"; 
    $Header .= "Content-Disposition: attachment; filename=$DateinameMail"; 
    $Header .= "\n\n"; 
    $Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname)); 
    $Header .= chunk_split(base64_encode($Dateiinhalt)); 
    $Header .= "\n"; 
    $Header .= "--$Trenner--"; 
    
    
    
    			mail($AmpfaengerMail, $Betreff, "", $Header); 
    
    
    ?>
    vielleicht könnt ihr ja etwas damit anfangen und sagen warum es nicht geht

  • #2
    Fehlermeldung, Timeout, sonst irgendeine FEHLERBESCHREIBUNG?

    Kommentar


    • #3
      nein, keine

      Kommentar


      • #4
        error_reporting(E_ALL); verwenden + fehlermeldung posten
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          kann tatsächlich an irgendwelchen timeouts liegen.
          aber ersteinmal solltest du überprüfen, ob mail() richtige argumente bekommt. teste am besten deinen code mit mehreren unterschiedlich großen dateien auf unterschiedlichen servern.

          Kommentar


          • #6
            ja mit kleineren dateien gehts
            auf nem anderen server mit der großen gehts auch nich (nur mit kleinen)

            und nen fehler bekomm ich nich :'(

            Kommentar


            • #7
              Lass dir mal den Inhalt von Dateiinhalt mittels var_dump() ausgeben.
              Ich vermute, dass du ein Puff mit den Zeilenendzeichen hast.
              string chunk_split ( string body [, int chunklen [, string end]] )

              Diese Funktion fügt nach per chunklen angegebene Zeichen (Vorgabe: alle 76 Zeichen) den mittels end angegebenen String (Vorgabe ist hierfür "\r\n") ein. Die Funktion gibt den neuen String zurück. Die Original-Zeichenkette bleibt unverändert.
              Du selbst verwendest \n als Zeilenende. Die Funktion setzt aber per Default \r\n als Zeilenende (was überigens auch gemäss RFC für Mails ist)

              Entweder du gibst der Funktion auch dein Zeilenendzeichen an oder du änderst deine bestehenden in \r\n

              Warum es aber nur mit kleinen Dateien geht verwundert mich ein wenig.

              Gruss

              tobi
              EDIT:

              $Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname));
              Wenn du dein Errorreporting scharf eingestellt hättest,dann würdest du bei dieser Zeile eine notice erhalten. Denn du versuchst etwas an eine nicht initialisierte Var anzuhängen.

              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                bzgl. deines edites: wo ist da das problem?
                Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                var_dump(), print_r(), debug_backtrace und echo.
                Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                Kommentar


                • #9
                  @Shurakai
                  Falls du mein Edit meinst: Es ist kein Problem aber eben nicht sauber wenn man nicht initialisierte Vars verwendet. Wollte ihm nur noch einen Tipp geben seinen Code zu "verbessern". PHP ist hier wirklich relativ gnädig, aber bei vielen anderen Sprachen führt dies zu einer exception.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    habe alle "/n" in "/r/n" umgetauscht, aber wieder das problem , dass er nur die kleinen dateien sendet

                    möchte vielleicht jemand den code mal auf seinem server testen?

                    Kommentar


                    • #11
                      Ich hoffe du hast entweder \n oder \r\n verwendet
                      Ich habe mal noch bei einem meiner Scripts nachgeschaut: Probier die Header und den Body der Mail zu trennen.
                      D.h. Die erste Boundary und alles folgende in eine var body rein und am Ende der mail übergeben. Deinen ausgelassenen Parameter (der dritte) mit Body ersetzen.

                      Mehr wüsste ich jetzt auch nicht...

                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        hmm .... aber wo is denn edr unterschied? das hat doch nix mit der größe der angehangenen datei zu tun, oder doch?

                        kannst du mir vielleicht einen großen gefallen tun und das auf deinem server testen? also ob du mit dem code große anhänge veschicken kannst ... wenn's nich geht, dann bin ich verwirrt

                        Kommentar


                        • #13
                          Den Gefallen habe ich dir nun getan und mir ein 870kb grosses Attachment geschickt. Ist ohne Probleme angekommen. Habe den Code noch etwas angepasst, weil mir der Content Header für zip nicht ganz geheuer war:
                          PHP-Code:
                          <?php

                          $AbsenderName 
                          "webmaster";


                          $AbsenderMail $AbsenderName.'@meiner_domain.com';
                          $Betreff 'betreff';
                          $text 'hallo';
                          $Header "From: ".$AbsenderName." <".$AbsenderMail.">";



                          $Dateiname "anhang.zip";
                          $DateinameMail "anhang.zip";

                          $Trenner md5(uniqid(time()));
                          $Header .= "\r\n";
                          $Header .= "MIME-Version: 1.0";
                          $Header .= "\r\n";
                          $Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
                          $Header .= "\r\n\r\n";
                          //$Header .= "This is a multi-part message in MIME format";
                          //$Header .= "\r\n";
                          $body "--$Trenner";
                          $body .= "\r\n";
                          $body .= "Content-Type: text/plain";
                          $body .= "\r\n";
                          $body .= "Content-Transfer-Encoding: 8bit";
                          $body .= "\r\n\r\n";
                          $body .= $text;
                          $body .= "\r\n";
                          $body .= "--$Trenner";
                          $body .= "\r\n";
                          $body .= "Content-Type: application/zip; name=$DateinameMail";
                          $body .= "\r\n";
                          $body .= "Content-Transfer-Encoding: base64";
                          $body .= "\r\n";
                          $body .= "Content-Disposition: attachment; filename=$DateinameMail";
                          $body .= "\r\n\r\n";
                          $Dateiinhalt fread(fopen($Dateiname"r"), filesize($Dateiname));
                          $body .= chunk_split(base64_encode($Dateiinhalt));
                          $body .= "\r\n";
                          $body .= "--$Trenner--\r\n\r\n";



                          if (
                          mail('me@meiner_domain.com'$Betreff$body$Header))
                          {
                            echo 
                          "Mail verschickt";
                          }
                          else
                          {
                            echo 
                          "Fehler beim Versenden";
                          }
                          ?>
                          Hoffe dass es nun auch bei dir funzt.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            wow ... danke
                            hab mich schon gefreut, dass es jetzt funktionieren wird, aber leider doch nich

                            aber es wird wieder keine fehlermeldung angezeigt, sondern "Mail verschickt" .... die welt ist doch grausam

                            auch dein script funktioniert nur mit kleinen dateien. Kann es sein, dass mein anbieter www.ohost.de einfach keine versendung vo so großen dateien erlaubt? finde ich aber etwas eigenartig

                            Kommentar


                            • #15
                              es gibt tausend möglichkeiten: timeout, größenbeschränkung des einen servers, größenbeschränkung des anderen Servers, ...

                              Da du aber vermutlich noch nichtmal in der Lage warst, dein error_reporting nach unseren wünschen einzustellen, hilft alles weitere auch nicht. egal, ob das später den fehler zeigt oder nicht.

                              Kommentar

                              Lädt...
                              X