Ankündigung

Einklappen
Keine Ankündigung bisher.

Via IMAP E-Mails an unterschiedliche Adressen schicken

Einklappen

Neue Werbung 2019

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

  • Via IMAP E-Mails an unterschiedliche Adressen schicken

    Moin moin,

    ich komme im Moment nicht weiter bei einem kleinen Problem und hoffe auf eure Hilfe

    Aufgabenstellung:
    Es gibt eine Zentrale E-Mail-Adresse (info@...) worrauf täglich um die 60 E-Mails laufen. Diese E-Mails müssen gerecht (gleichmäßig) auf z.b. 3 E-Mail-Adressen verteilt werden.
    - Anhänge müssen mitgeleitet werden
    - Der Versender soll möglichst noch der Orginale sein (bzgl. beantwortung der E-Mail)
    - Das Script würde über einen Server in z.b. 5 Minütigen abständen aufgerufen (dass ist kein Problem )
    - Die E-Mails liegen auf dem POP3-Server unseres Hosters

    Gibt es ein kostenloses Framework welches ich verwenden kann (muss) um die Anhänge ordentlich verwalten zu können?

    Welches ist die geeignetste Vorgehensweise (bzgl. Framework oder gehts über PHP auch einfach?)

    Habt ihr Anlaufestellen die ich mir mal angucken könnte (Dokumentationen wo so etwas ähnliches schonmal zusammengefasst wurde)

    Ich habe hier einen Windows2008 R2 server am laufen, dort habe ich auch schon ein kleines Backend geschrieben zum de-/aktivieren der einzelnen E-Mails, welches dann entsprechend in einer Datenbank abgelegt wird, sodass dass script immer darauf zugreifen kann. (Falls mal jemand Urlaub hat)

    Mfg und danke vorab


  • #2
    Hallöchen,

    ich habe für ähnliche Zwecke mal php-imap verwendet. Damit kannst du Mails auslesen, löschen und auch die Anhänge problemlos extrahieren.

    Für das Versenden von Mails eignet sich bspw. Switftmailer oder PHPMailer.

    Viele Grüße,
    lotti

    Kommentar


    • #3
      vorneweg:

      wilkommen im forum!
      1.)
      ich find den aufwand zu gross und würde procmail nutzen.
      2.)
      und singnierte und verschlüsselte mail brauchbar in den griff zu kriegen, rate ich dir zu einer eigenentwicklung oder http://flourishlib.com/docs/fMailbox#fMailbox
      3.)
      das imap protokoll ermöglich per se, dass mehre user einen account beackern
      4.)
      imap schickt keine mails!
      5.)
      bitte führe dir in einer ruhigen minute das annouce zu gemüte.

      Kommentar


      • #4
        Hallo,

        ich hab das nun mit php-imap und PHPMailer gelöst, an einigen stellen zwar nicht soo sauber aber es läuft bis jetzt ganz gut.

        Entschuldige moma falls ich ins Falsche forum gepostet hab. Ich stufe mich als Fortgeschritten ein und hab es deswegen auch in diese Forum gepostet, im annouce steht nun es sei "ein Forum für Profis"... wer lesen kann

        Anbei mein Code falls ihn jemand Interessiert.

        PHP-Code:
        <?php
        chdir
        (dirname(__FILE__));

        require_once(
        dirname(__FILE__).'\PHPMailer\PHPMailerAutoload.php');
        require_once(
        dirname(__FILE__).'\php-imap\src\ImapMailbox.php');

        //MySql-Verbindung aufbauen
        $link mysqli_connect('localhost''user''password''mailverteiler');
        mysqli_set_charset($link'utf8');

        //abrufen wohin die letzte mail ging
        $query mysqli_query($link'Select letzte_id from config');

            if (!
        $query)
                die(
        'Ungültiges Query: ' mysqli_error($link));
                
        $letzteid mysqli_fetch_row($query);
        $letzteid $letzteid[0];

        $query mysqli_query($link'Select id, email from Benutzer where aktiv = 1');

        while(
        $row mysqli_fetch_array($queryMYSQL_ASSOC))
        {
        $empfaenger[] = $row;
        }

        //mind. 1 empfänger aktiv?
        if (!isset($empfaenger[0]['id']))
        {
            die (
        'Kein Empfänger aktiv');
        }

        //Verbindung zum POP-Server. Zu diesem Account werden die Mails von info@ und service@ geleitet.

        $username 'verteiler@domain.com';
        $password 'password';
        $server '{pop.1und1.de:995/pop3/ssl}';
        $inbox $server 'INBOX';

        $mailbox = new ImapMailbox($inbox$username $passworddirname(__FILE__) . '/attachments''iso-8859-1');
        $mails = array();

        // Get some mail
        $mailsIds $mailbox->searchMailBox('ALL');
        if(!
        $mailsIds) {
            die(
        'Mailbox is empty');
        }

        //Jede Mail durchgehen und verteilen
        foreach ($mailsIds as $mailId)
        {
        //Empfänger rotieren lassen
        for($i 0$i<count($empfaenger); $i++)
        {
            if (
        $empfaenger[$i]['id'] == $letzteid)
            {
                if (isset(
        $empfaenger[$i+1]['id']))
                {
                    
        $to $empfaenger[$i+1]['email'];
                    
        $letzteid $empfaenger[$i+1]['id'];
                    break;
                }
                else
                {
                    
        $to $empfaenger[0]['email'];
                    
        $letzteid $empfaenger[0]['id'];
                }
            }
        }

        //Kein Empfänger ausgewählt? Nehm den ersten in der Liste. Nötig bzgl. änderung der Aktivitäten, da die Reihenfolge durcheinander kommt.
        if ($to == "")
        {
            
        $to $empfaenger[0]['email'];
            
        $letzteid $empfaenger[0]['id'];
        }

        //letzte mail abrufen und verarbeiten
            
        $mailrec $mailbox->getMail($mailId);

            
        $mailsend = new PHPMailer;

            
        $mailsend->isSMTP();
            
        $mailsend->Host 'smtp.1und1.de';
            
        $mailsend->SMTPAuth true;
            
        $mailsend->Username $username;
            
        $mailsend->Password $password;
            
        //$mailsend->SMTPSecure = 'ssl';
            
        $mailsend->Port 587;

            
        $mailsend->From $mailrec->fromAddress;
            
        $mailsend->FromName $mailrec->fromName;
            
        $mailsend->addAddress($to);
            
        $mailsend->addReplyTo($mailrec->fromAddress);

            
        //Anhänge vorhanden?
            
        foreach ($mailrec->GetAttachments() as $attachment)
            {
                
        //Wenn Anhang ein @ enthält, ID einbinden. Wichtig für Embedded Bilder etc.
                
        if (strpos($attachment->id'@')) {
                    
        $mailsend->AddEmbeddedImage ($attachment->filePath$attachment->id);
                    } else {
                    
        $mailsend->addAttachment ($attachment->filePath$attachment->name);
                    }
            }
            
        //HTML-Mail?
            
        if ($mailrec->textHtml == "") {
                
        $mailsend->isHTML(false);
                
        $mailsend->Body $mailrec->textPlain;
            } else {
                
        $mailsend->isHTML(true);
                
        $mailsend->Body $mailrec->textHtml;
                
        $mailsend->AltBody $mailrec->textPlain;
            }
            
            
        $mailsend->Subject $mailrec->subject;

            if (!
        $mailsend->send())
            {
                die( 
        'Fehler: ' $mailsend->ErrorInfo).'\n';
            }
            else
            {
                echo 
        'Alles raus\n';
            }
            
            
        //Anhänge aus dem Ordner löschen
            
        foreach ($mailrec->GetAttachments() as $attachment)
            {
                if (
        unlink($attachment->filePath))
                {
                echo 
        'Anhang gelöscht\n';
                } else {
                echo 
        'Anhang konnte nicht gelöscht werden\n';
                }
            }
            
        //Logeintrag in der Datenbank einfügen.
        $update "Insert into Log values ($letzteid, \"".htmlspecialchars ($mailsend->From)."\", \"".htmlspecialchars ($mailsend->Subject)."\", '".date('Y-m-d H:i:s')."')";
            if (!
        mysqli_query($link$update))
            {
                die(
        'Update konnte nicht ausgeführt werden: ' mysqli_error($link) . '\n');
            }
            
            
        //Mail löschen.
            
        $mailbox->deleteMail($mailId);    
        }

        //Letzte ID in die Datenbank schreiben
        $update 'Update config Set letzte_id = ' $letzteid;

                    if (!
        mysqli_query($link$update))
                    {
                        die(
        'Update konnte nicht ausgeführt werden: ' mysqli_error($link) . '\n');
                    }
                    
        ?>

        Kommentar


        • #5
          Nach den Anforderungen hört es sich nach einem Issue-Tracking-Systeme an. Eine Liste vorhandener Issue-Tracking-Systeme bei Wikipedia

          Kommentar


          • #6
            Zitat von h0d3nt3uf3l Beitrag anzeigen
            Entschuldige moma falls ich ins Falsche forum gepostet hab. Ich stufe mich als Fortgeschritten ein und hab es deswegen auch in diese Forum gepostet, im annouce steht nun es sei "ein Forum für Profis"... wer lesen kann

            na dann, othographie ist ja bekanntermasen nicht meine stärke

            achja, was hat das ganze den mit imap zu tun?

            Kommentar


            • #7
              Moin Moma,

              ja, Rechtschreibung ist nicht meins. Zumindest nicht wenn ich in der Arbeit sitze und etwas in ein Forum schreibe.

              Wenn ich mir das oben geschriebene so durchlese muss ich mich auch am Kopf kratzen und was das mit IMAP zu tun hat: Ich müsste auch meine Beschreibungen etwas verbessern.
              Vielleicht lag es auch daran dass mir der Kopf schon geraucht hat nachdem ich mir die unterschiedlichsten Sachen durchgelesen hatte um mein Problem zu lösen, aber nichts brauchbares dabei gefunden habe.

              Danke Blar für den Hinweis, muss mich mal mit solchen Systemen auseinandersetzten wenn ich Zeit finde.

              Kommentar

              Lädt...
              X