Ankündigung

Einklappen
Keine Ankündigung bisher.

Optimierung des Ladevorgangs von IMAP in Verbindung mit PHP und Datenbanken

Einklappen

Neue Werbung 2019

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

  • Optimierung des Ladevorgangs von IMAP in Verbindung mit PHP und Datenbanken

    In meiner Laravel-Anwendung programmiere ich einen IMAP-Mail-Client mit Verbindung zu einem Office365. Ich musste feststellen, dass die Ladezeiten sehr bescheiden sind. Bei einer Mailbox mit 1800 Mails bricht sogar der Ladevorgang zusammen.

    Meine aktuelle Überlegung war, einen Cronjob im Hintergrund laufen zu lassen, der je nach Einstellung die Mailboxen überprüft und dann die Mails in einer DB erfasst, z.B. UID, Absender, Empfänger, Betreff, Body. Im Controller und im View würde ich dann einfach diese Daten ausgeben und im Falle des Lesens über die UID abrufen.

    Nun habe ich zwei Fragen:

    Welche Datenbank ist die beste Anwendung? Eine wie REDIS oder die bereits für den Rest von uns verwendete PostgreSQL?

    Muss ich das überhaupt so machen, gibt es eine Möglichkeit, sie zwischenzuspeichern und so den Ladevorgang zu optimieren?


  • #2
    Ohne Code zu sehen ist es sehr schwierig zu sagen warum die Ladezeiten so bescheiden sind.
    Z.B.: Rufst du nur die Header ab oder die gesamten Mails?

    Welches die beste Datenbank ist kann man nicht sagen: 10 Experten, 10 verschiedene Meinungen.
    Aber PostgreSQL wird sicher ausreichend sein. Warum eine NOSQL DB verwenden wenn du nur gleich strukturierte Informationen hast?
    Eine Mannschaft aus Granit! So wie einst Real Madrid!
    Und so zogen wir in die Bundesliga ein und wir werden wieder Deutscher Meister sein!

    Kommentar


    • #3
      Ich nutze aktuell das https://github.com/Webklex/laravel-imap Framework.
      Mein Code dazu ist der hier:

      PHP-Code:
      $client Client::account('default');
      $client->connect();  

      $folder $client->getFolder(env($mailbox));

      $messages $folder->query(null)->limit(10)->leaveUnread()->get(); 
      Der Limit-Parameter ist nur gesetzt, damit ich überhaupt was testen kann.
      Ich glaube, er liest damit die komplette Mail ein.
      Habe es auch so versucht:

      PHP-Code:
      $messages $folder->query(null)->setFetchBody(false)->setFetchAttachment(false)->leaveUnread()->get(); 
      Dasselbe Ergebnis, leider.

      Kommentar


      • #4
        Ich kenne Laravel nicht, aber was passiert wenn du es mal nur mit imap_fetch_header versuchst?
        Und Code solltest du so hier einfügen, dass man nicht horizontal scrollen muss
        Eine Mannschaft aus Granit! So wie einst Real Madrid!
        Und so zogen wir in die Bundesliga ein und wir werden wieder Deutscher Meister sein!

        Kommentar


        • #5
          oder nimm doch erstmal
          PHP-Code:
          /** @var \Webklex\IMAP\Support\MessageCollection $aMessage */
          $count $oFolder->query()->all()->count(); 
          und beschäftige dich dann mit den eizelnnen nachrichten...
          mir ist kein webmailer bekannt, welcher in einem run 1800 nachrichten verarbeitet, und sei es auch nur deren header.
          wieso auch ?

          Kommentar


          • #6
            Zitat von malte Beitrag anzeigen
            In meiner Laravel-Anwendung programmiere ich einen IMAP-Mail-Client mit Verbindung zu einem Office365.
            Warum nimmst du nicht was Fertiges, wie zum Beispiel roundcube?

            Das kannst du dir ja nach deinen Wünschen anpassen, mir wäre das aber zu aufwendig, das alles selber zu programmieren.

            Kommentar


            • #7
              Zitat von malte Beitrag anzeigen
              Der Limit-Parameter ist nur gesetzt, damit ich überhaupt was testen kann.
              Ich glaube, er liest damit die komplette Mail ein.
              Habe es auch so versucht:

              PHP-Code:
              $messages $folder->query(null)->setFetchBody(false)->setFetchAttachment(false)->leaveUnread()->get(); 
              Dasselbe Ergebnis, leider.
              Brauchst du überhaupt alle Mails aufeinmal bzw. was willst du damit machen? IMAP bietet dir unzählige möglichkeiten Mails zu selektieren.
              Ansonsten solltest du dir eventuell auch eine andere Bibliothek suchen oder direkt die imap Funktionen von PHP nutzen. Die Klasse sammelt die Nachrichten erst zusammen und gibt die als ganzes zurück. Für große Datenmengen ist das suboptimal.

              Kommentar

              Lädt...
              X