tingel
Goto Top

Mailfiltern

Hallo,
ich würde gern folgendes unter Linux auf Konsolenebene realisieren:

- automatisches Abholen der Mails alle X Minuten per IMAP
- die Mails filtern nach:
- bestimmter Absender
- bestimmter Betreff ( bzw. bestimmte Zeichenkette im Betreff)
- wenn beide Filter zutreffen, den Mailinhalt in eine bestimmte Text-Datei speichern und den etwaigen Anhang ebenfalls in den gleichen Ordner mit einem bestimmten Dateinamen speichern und einen weiteren Befehl ausführen
- wenn nur ein Filter bzw keiner zutrifft, die Mail weiterleiten

Hab mir schon die Software Mutt angeschaut, aber das ist ja an sich kein Mailfilter.
Gibt es etwas, was dies in einer Software vereint?

Content-ID: 285605

Url: https://administrator.de/contentid/285605

Ausgedruckt am: 14.11.2024 um 01:11 Uhr

114757
114757 15.10.2015 um 08:28:27 Uhr
Goto Top
Moin tingel,
schau mal hier rein:
Linux: Automatisiert Posteingang checken und Skript ausführen
Mit minimalen Anpassungen schon das was du suchst.

Gruß jodel32
tingel
tingel 15.10.2015 um 08:40:58 Uhr
Goto Top
Vielen Dank.
Ich werd mich mal da mal durcharbeiten und dann wieder melden.
tingel
tingel 15.10.2015 um 09:17:08 Uhr
Goto Top
Habe jetzt mal schnell etwas gebastelt.
Stimmt das so?

#!/usr/bin/python
import imaplib
import email 
# ----------------------------
SERVER = "imap.domain.de"  
USERNAME = "MaxMuster"  
PASSWORD = "Geheim"  
# -----------------------------
conn = imaplib.IMAP4_SSL(SERVER)
conn.login(USERNAME,PASSWORD)
# Inbox selektieren 
typ, data = conn.select('INBOX')  
# Nur ungelesene Mails mit einem bestimmten Betreff und Absender filtern und in einer Liste speichern 
typ, [msg_ids] = conn.uid('search',None,'(UNSEEN SUBJECT "testmail", FROM "sender@domain.com")')  

if msg_ids:
  for id in msg_ids.split():
    #print id
    typ,mail = conn.uid('fetch',id,'(RFC822)')  
    msg = email.message_from_string(mail[1])
    subject = msg['subject']  
    # neue Datei erstellen
    file = open('latest-mail.txt','w')  
    file.write("msg")  
    file.close()
    # Wenn Anhang vorhanden, in Datei speichern
    for part in msg.walk():
    if part.get('Content-Disposition').startswith('attach') or 'filename' in part.get('Content-  Disposition'):  
    {
    filename = part.get_filename()
    data = part.get_payload(decode=True)
    #Anhang umbenennen
    newname=fname.replace("filename","latest-attachment.pdf")  
    }

    # externen Befehl aufrufen...

conn.close()
conn.logout()
Lochkartenstanzer
Lochkartenstanzer 15.10.2015 aktualisiert um 09:22:00 Uhr
Goto Top
Moin,

Das machst Du normalerweise mit dem lokalen delivery-agent (procmail, deliver, etc.) Du kannst mit fetchmail Deine Mails holen udn dann mit deliver, procmail oder was Du sonst benutzen willst sortieren lassen. Hier findest Du ein paar Beispiele].

lks

PS: Ich benutze Sieve um meine Mails vorzusortieren. face-smile
114757
114757 15.10.2015 aktualisiert um 09:43:37 Uhr
Goto Top
Zitat von @tingel:
Habe jetzt mal schnell etwas gebastelt.
Stimmt das so?
Probiers doch aus ...
tingel
tingel 15.10.2015 um 11:21:25 Uhr
Goto Top
@jodel: Geht so nicht (nur zur Info)

Was ist nun die bessere/zuverlässigere Methode?
114757
114757 15.10.2015 aktualisiert um 11:47:15 Uhr
Goto Top
Zitat von @tingel:
@jodel: Geht so nicht (nur zur Info)
War mir klar face-smile
Was ist nun die bessere/zuverlässigere Methode?
Phyton lernen, oder Links von LKS lesen ...
tingel
tingel 15.10.2015 um 12:02:42 Uhr
Goto Top
Ja, das ist mir klar.

Aber es gibt doch sicherlich Erfahrungswerte, welche Methode zuverlässiger/schneller ist.
Lochkartenstanzer
Lochkartenstanzer 15.10.2015 um 12:06:40 Uhr
Goto Top
Zitat von @tingel:

Aber es gibt doch sicherlich Erfahrungswerte, welche Methode zuverlässiger/schneller ist.

Als die sieve-methode funktioniert sehr zuverlässig:

  • per fetchmail oder smtp die Mail lokal einkippen
  • und von sieve sortieren lassen.

Die PHP-Method benötige ich nicht, außerdem sprechen ich kaum PHP udn nutze es daher nicht.

Was meinst Du mit schneller?

lks
tingel
tingel 15.10.2015 um 14:36:33 Uhr
Goto Top
Folgendes wär mal denke ich schon halbwegs das, was ich suche.
:0
* ^From.*name@domain.com
* ^Subject.*Titel
| formail -I -f "from"  >> /home/user/latest-mail.txt  

$HOME/rename.sh

:0
 * ! From:.*name@domain.com
 * ! Subject:.*Titel
| formail -k -X "From:" \  
-I "To: newadress@domain.com" -X "To:" \  
-I "Subject: Forwarded" -X "Subject:" \  
| $SENDMAIL $SENDMAILFLAGS -t


Sprich:
Wenn Absender und Betreff zutreffen, dann wird der Bodytext in /home/user/latest-mail.txt gespeichert und HOME/rename.sh ausgeführt

Wenn dies nicht zutrifft, wird die Mail an newadress@domain.com weitergeleitet.

Würde das stimmen?
Kann es noch nicht testen.

Wie würde das mit dem Anhang gehen, dass wenn der Anhang eine PDF-Datei ist, diese PDF immer unter dem gleichen Namen abspeichert und die alte PDF löscht?
Lochkartenstanzer
Lochkartenstanzer 15.10.2015 aktualisiert um 14:44:02 Uhr
Goto Top
Zitat von @tingel:

Sprich:
Wenn Absender und Betreff zutreffen, dann wird der Bodytext in /home/user/latest-mail.txt gespeichert und HOME/rename.sh ausgeführt

Wenn dies nicht zutrifft, wird die Mail an newadress@domain.com weitergeleitet.

Würde das stimmen?
Kann es noch nicht testen.

So nach dem ersten drüberfliegen habe ich nichts bemerkt, was dagegenspricht.


Wie würde das mit dem Anhang gehen, dass wenn der Anhang eine PDF-Datei ist, diese PDF immer unter dem gleichen Namen abspeichert und die alte PDF löscht?

Schau Dir mal munpack an.

lks
tingel
tingel 16.10.2015 um 11:58:08 Uhr
Goto Top
Wäre jemand so nett und kann mir sagen, wie das mit den Anhängen geht?
Alle Anlagen extrahieren geht, aber mein Vorhaben bekomm ich nicht hin.
tingel
tingel 21.10.2015 um 16:53:56 Uhr
Goto Top
Hallo,
kann mir keiner helfen? Bekomm es trotz des Studierens vieler Artikel nicht zum laufen.