Połączyć kilka liter w jedną?


Posiadamy system planowania prac SGE. Użytkownicy mogą zezwolić SGE na wysyłanie wiadomości e-mail w przypadku anulowania prac. W przypadku, gdy użytkownik ma zadania z dużymi tablicami (powiedzmy 100 000 tysięcy rekordów) i zabija je wszystkie naraz (po prostu
       qkill -u USER
), konto pocztowe użytkownika zostanie zalane e-mailami.
Wszystkie e-maile zostały wysłane z adresu
       root@qmaster.example.com
i mieć motyw
       "Job <numeric job id> (<name of script>) Killed"
.
Wszystkie wiadomości e-mail przechodzą przez instancję Postfix, która jest skonfigurowana jako serwer proxy poczty, ponieważ zbiera zadania ze wszystkich węzłów, a następnie przekazuje je do właściwego hosta poczty organizacji.
Chciałbym osiągnąć:
  • Zatrzymaj wszystkie e-maile przez, powiedzmy, 30 sekund przed przekazaniem.
  • Przejrzyj e-maile z ostatnich 30 sekund i sprawdź, czy są duplikaty (te same
             To:       
    , pozycje różnią się tylko numerycznym identyfikatorem zadania).
  • Jeśli, powiedzmy, otrzymano więcej niż 10 takich listów, to: [list][*]Utwórz „składaną” wiadomość e-mail z tematem „Zwinięte wiadomości e-mail dotyczące wielu ofert pracy () zakończono”
  • Pokaż tekst pierwszych 5 e-maili
  • Następnie wyświetl
                 "And <number> similar emails were dropped"           
  • Ustaw czas e-maili na aktualny czas i kolejkę.

[/*]
[*]
Jeśli zdarzy się to kilka razy,
         <number>
powyżej należy odpowiednio zwiększyć.
[/*]
[*]
Następnie e-maile powinny być starsze niż 30 sekund.
[/*]
[/list]
Wydaje mi się, że nie znalazłem odpowiednich słów kluczowych, ale nie mogłem znaleźć odpowiedniego miejsca na taki skrypt. Gdzie można umieścić taki skrypt?
Nie mam problemu z napisaniem takiego scenariusza, ale jeśli ktoś wie o czymś, co istnieje, chciałbym się o tym dowiedzieć.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ok, w końcu rozwiązałem to pisząc

filtr/milter poczty
http://www.postfix.org/MILTER_README.html
działa tak:
  • Jeśli wiadomość pasuje
               From:         
    /
               Subject:         
    wzór, jest dalej przetwarzany. W przeciwnym razie jest akceptowany bezpośrednio.
  • W przypadku przetwarzania umieść go w bazie danych sqlite ze znacznikiem czasu i
               To:         
    pole.
  • Jezeli tam
               ==         
    X wiadomości w ciągu ostatnich Y sekund wysyła wiadomość ostrzegawczą, która informuje odbiorcę, że jego e-mail został odfiltrowany/usunięty.
  • Jezeli tam
               <         
    X wiadomości w ciągu ostatnich Y sekund, a następnie przekaż wiadomość e-mail.
  • Jezeli tam
               >         
    X wiadomości w ciągu ostatnich Y sekund, a następnie zresetuj pocztę e-mail.

Używając poprawnie transakcji, można zagwarantować, że (1) nie więcej niż X e-maili zostanie wysłanych w ciągu Y sekund oraz że (2) ostrzeżenie „że przyszłe e-maile zostaną odrzucone” może zostać wysłane dokładnie raz po osiągnięciu progu .
Jak dotąd działa to dobrze.
Zauważ, że można to również rozszerzyć, aby scalić wiadomości e-mail w jedno CV po zakończeniu partii, ale ostatecznie nie chciałem tracić czasu na wdrażanie tego.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się