Ankündigung

Einklappen
Keine Ankündigung bisher.

dateien aus verzeichnis einzeln als mail attachment versenden

Einklappen

Neue Werbung 2019

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

  • dateien aus verzeichnis einzeln als mail attachment versenden

    tag forum,

    in ein verzeichnis werden fortlaufend dateien gespeichert. diese sollen zeitgesteuert per mail() als attachment verschickt werden - alle innerhalb eines definierten zeitraums hinzugekommenen und jeweils eine datei / mail.

    so sieht mein ansatz aus:

    1. dateiverzeichnis lesen
    2. auswahl der dateien nach den gewünschten kriterien (seit ymdh hinzugekommen, etc.)
    3. foreach-schleife über das array aus 2.
    4. encoden der datei
    5. versenden der datei als attachment mit mail()

    die funktionalitäten in 4. und 5. habe ich am laufen, das heißt, ich habe es geschafft eine valide mail mit validem attachment zu erzeugen); was mir nicht gelingt, ist die foreach-schleife in 3. so zu definieren, dass sie eine sinnvolle ausgabe liefert.
    diese sieht momentan so aus: analog der zahl der in 2. eingeschränkten ergebnisse werden mails verschickt; die mails haben alle das gleiche (aus dem dateinamen generierte) subject; der body enthält den body der mail + den der vorherigen und der anhang ist korrupt (letzteres hängt imho auch mit dem falschen schleifendurchlauf zusammen).

    hier mal mein code zum nachvollziehen; die hier nicht definierten variablen liegen bereits aus einem anderen script an:
    PHP-Code:
    #    TRENNELEMENT FUER DEN MAILHEADER
        
    $mimeBoundary "==Multipart_Boundary_x".md5(mt_rand())."x";


    #    WEITERE MAIL-ATTRIBUTE
        
    $contentType "application/xml";
        
    $mailBodyContentType "text/plain; charset=\"iso-8859-1\"";
        
    $mailBodyContentTransferEncoding "7bit";
        
    $mailHeaderContentType "text/plain; charset=iso-8859-15";
        
    $mailHeaderMimeVersion "1.0";


    #    LINE BREAKS
        
    $lB="\r\n";


    #    VERZEICHNIS LESEN
        
    $readDirectory opendir($filePath);

            while (
    false !== ($getFileName readdir($readDirectory))) {
                
    $getFile fopen($filePath.$getFileName,'rb');


    #    ERSTELLUNGS- / AENDERUNGSZEIT ERMITTELN
                
    $getCreationTime filectime($filePath.$getFileName);
                
    $creationTime date ("YmdH",$getCreationTime);


    #    UNBRAUCHBARE DATEIEN AUSFILTERN
                
    if ($getFileName != "." && $getFileName != "..") {


    #    ARRAY ZERLEGEN
                    
    $getFileName explode($getFileName'');



    #    EIN DURCHLAUF FUER JEDE DATEI
                    
    foreach ($dings as $bums)    {    //    keine ahnung, was ich hier als argumente nehmen muss...



    #    DATEI ENCODEN
                        
    $data fread($getFile,filesize($filePath.$writeFileName));
                        
    fclose($getFile);
                        
    $data chunk_split(base64_encode($data));


    #    ATTRIBUTE DER mail()-FUNKTION
                        
    $mailTo = [];

                        
    $mailSubject = [];

                        
    $mailBody .=
                            
    "--{$mimeBoundary}".$lB.
                            
    "Content-Type: ".$mailBodyContentType.$lB.
                            
    "Content-Transfer-Encoding: ".$mailBodyContentTransferEncoding.$lB.
                            
    $mailBodySalutation.$lB.$lB.$customerName.
                            
    $mailBodyMessage1.$orderRecipientName.$mailBodyMessage2.$lB.$mailBodyMessage3.$lB.$lB.$lB.
                            
    $mailBodyGreeting.$lB.$lB.$lB.
                            
    "--{$mimeBoundary}".$lB.
                            
    "Content-Type: {$contentType};".$lB.
                            
    " name=\"{$getFileName}\"".$lB.
                            
    $data.$lB.
                            
    "--{$mimeBoundary}--".$lB;

                        
    $mailHeader .=
                            
    "From: […]"$lB.
                            
    "Reply-To: […]"$lB.
                            
    "Content-Type: […]"$lB.
                            
    "MIME-Version: ".$mailHeaderMimeVersion.$lB.
                            
    "Content-Type: multipart/mixed;".$lB.
                            
    " boundary=\"{$mimeBoundary}\"".$lB;


    #    VERSENDEN DER BENACHRICHTIGUNGS-MAIL
                        
    $sendMail = @mail($mailTo,$mailSubject,$mailBody,$mailHeader);

                        }    
    //    foreach ($getFileName as $getFileName)
                    
    }    //    if ($getFileName != "." && $getFileName != "..")
                
    }    //    while (false !== ($getFileName = readdir($readDirectory)))


            
    closedir($readDirectory);
    #        }    //    if ($readDirectory = opendir($filePath)) 
    irgendwie blicke ich nicht mehr durch und würde mich extrem über hilfe freuen...
    grüße vom mathes

  • #2
    Wofür brauchst du überhaupt die foreach() Schleife? Du gehst doch mit der while() Schleife jede Datei durch, und die die du verschicken willst kannst du doch dann in der while() Schleife nutzen. Du iterierst ja mit while() schon über alle Dateien!

    Kommentar


    • #3
      ohja *schäm*...
      wie gesagt, mir verschwimmt alles gerade etwas vor den augen...


      die foreach-schleife habe ich entfernt, das ergebnis bleibt
      grüße vom mathes

      Kommentar


      • #4
        Ja vielleicht solltest du auch die Namen der Variablen anpassen dass der Filename auch dann wirklich die Datei ist die angehängt wird. Ich seh da bei fread() nur ein $getFile und sonst meisten $getFileName.

        Und was soll überhaupt die Zeile $getFileName = explode($getFileName, ''); ???

        Kommentar


        • #5
          Wenn die Dateien nach dem Mailen nicht automatisch verschoben oder gelöscht werden, musst du auch sicherstellen, dass die nicht mehrfach angefasst werden.

          Alternativ kannst du ja auch den URL der Dateien mailen und der Empfänger macht einen Download.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Ja vielleicht solltest du auch die Namen der Variablen anpassen dass der Filename auch dann wirklich die Datei ist die angehängt wird. Ich seh da bei fread() nur ein $getFile und sonst meisten $getFileName.

            Und was soll überhaupt die Zeile $getFileName = explode($getFileName, ''); ???
            *hüstel* ich werde nochmal drüberschauen...

            Wenn die Dateien nach dem Mailen nicht automatisch verschoben oder gelöscht werden, musst du auch sicherstellen, dass die nicht mehrfach angefasst werden.
            das wird durch die zeitsteuerung (intervallweise) von selbst geregelt.

            Alternativ kannst du ja auch den URL der Dateien mailen und der Empfänger macht einen Download.
            nee, da gibt es eine vorgabe...
            grüße vom mathes

            Kommentar

            Lädt...
            X