Java-E-Mail-Simulatorbibliothek mit Reinigungsfunktion

Unsere Plattform kann zu Testzwecken mit einem E-Mail-Simulator verbunden werden, der E-Mail-Anfragen sammelt und abgefragt werden kann, um alle empfangenen E-Mails anzuzeigen. Unsere aktuelle Implementierung basiert auf GreenMail . Es funktioniert grundsätzlich gut, aber wenn wir viele E-Mails senden, stirbt der Simulator irgendwann mit einem OutOfMemoryError.

Wir haben ähnliche Probleme mit unseren anderen (selbst implementierten) Simulatoren (SMS, APNS, GCM) gelöst, indem wir die einfachen Listen, die verwendet wurden, um die empfangenen Nachrichten zu speichern, durch Guavas EvictingQueues ersetzt haben, damit sie sich selbst bei Spam am Leben erhalten.

Kennt jemand eine Bibliothek, mit der wir den E-Mail-Empfang simulieren können, die aber die ältesten Nachrichten automatisch löschen kann?

Hast du den Quellcode? Warum nicht das Speicherleck aufspüren? ValGrind, et al . valgrind.org
Der Grund für das Leck ist offensichtlich, aber dies ist eine Bibliothek. Ich werde die Implementierung lokal nicht ändern und habe derzeit keine Zeit, dies dem GreenMail-Projekt zur Verfügung zu stellen (obwohl ich nicht einmal sicher bin, ob ich das tun darf).
Also, 1) Sie würden lieber etwas Suboptimales verwenden, als eine lokale Lösung vorzunehmen? Und 2) Sie sind glücklich genug, jemandes FOSS zu verwenden, tragen aber zur Community bei, indem Sie andere auf einen Ihnen bekannten Fehler aufmerksam machen?
@Mawg Bitte belehren Sie mich nicht über die Idee von FOSS, ich bin mir dessen bewusst. Ich habe sogar ein Problem dafür im Github-Repository von GreenMail geöffnet, das im Grunde mit „Gute Idee, können Sie eine Lösung bereitstellen?“ beantwortet wurde. Einfache Antwort ist: So sehr ich es auch möchte, ich kann es zu diesem Zeitpunkt nicht. Wir verwenden die Bibliothek zu Testzwecken in unserem Projekt, aber sie ist nicht Teil des Haupt-Deployments, daher ist das Leck im Grunde nicht wichtig genug, um Ressourcen für die Behebung selbst bereitzustellen. Damit ist meine eigentliche Frage noch nicht beantwortet.
Schön zu hören, dass du es gemeldet hast. Okay, mal sehen, ob wir dir helfen können ...

Antworten (1)

Hast du mal JavaMail Mock2 probiert ? Ich bin mir nicht 100 % sicher, ob dies die Anforderung erfüllt, die älteste E-Mail automatisch zu löschen, aber es sieht so aus, als ob es für Sie funktionieren könnte. Es ist kein vollwertiger Simulator wie GreenMail, aber es unterstützt verschiedene Posteingänge. Nur um anzumerken, dass ich das noch nie probiert habe.

Aus der readme.md:

Open-Source-Mock-Klassen für Mockup-JavaMail (besonders nützlich für Unit-Tests). Unterstützt IMAP-IDLE.

Merkmale:

  • Unterstützt imap, imaps, pop3, pop3s, smtp, smtps
  • POP3
    • In POP3-Ordner übertragen
    • Folder.getUID (Nachricht msg)
  • IMAP
    • In IMAPFolder und UIDFolder umwandeln
    • LEERLAUF
    • ICH WÜRDE
    • Unterordner
    • Folder.getMessagesByUID(...)
    • Ordner löschen/umbenennen
    • Nachrichten anhängen
  • Kommt mit zwei Modi, normal (Halfmock) oder Fullmock
    • Mit Normal können Sie sich mit echten POP- oder IMAP-Servern verbinden. Wird im Allgemeinen verwendet, wenn Sie gemischte Testaufbauten verwenden
    • Fullmock ist nur für verspottete Tests

Hier ist ein Link zu den Java-Dokumenten und ein Link zu einem " realen Nutzungsszenario ".

Danke für den Vorschlag, aber es sieht nicht so aus, als würde dies das liefern, wonach ich suche. Im Wesentlichen möchte ich eine Implementierung, die Nachrichten automatisch "verliert", was meiner Meinung nach die meisten Leute genau nicht wollen.