Raketenwilli: Kleines Python-Skript zum Testen...

Beitrag lesen

Wenn man jetzt wüsste, auf welcher Basis dieses Projekt aufgebaut ist... Welche serverseitige Sprache kommt zum Einsatz? Verwendet ihr eine Datenbank?

Hm. Ich glaube der TO sucht etwas Fertiges.

Ich habe mal die Python-Imap-Tools getestet:

(Installation unter Debian und Derivaten:)

sudo apt install python3-imap-tools

Test-Skript: (Ausdrücklich: Nicht produktiv verwenden! Warnungen folgen.)

  • Geht zwar, erzeugt aber, wenn viele Mails auf dem Server liegen, heftigen Datenverkehr (weil alle Mails abgerufen - und übrigens sonst nicht geändert werden) und braucht bei vielen Mails dementsprechend auch lange.
  • Zudem muss das Passwort für das Mailkonto im Programm angegeben werden. Das gilt „per se“ als gefährlich.
  • Es wird nicht mit gut gesicherten Mailservern (z.B. google-Mail) funktionieren (OAuth[2] müsste dazu eingebaut werden, dass ist es aber bei Weitem nicht mehr so trivial.)
  • ist nur „gegen“ einen Server mit TLS (Port 993) getestet.
#!/usr/bin/python

#############################################
# Only for testing!                         #
# NEVER use this in productiv environments! #
#############################################


### Config:

outFile    = '/tmp/mails.csv'
mailServer = 'Dein-Imap-Server'
mailFolder = 'INBOX'
loginName  = 'Dein-Login-Name'
loginPass  = 'Dein-Passwort'
csvDialect = 'unix'

### Program:

import csv
from imap_tools import MailBox, AND

with MailBox( mailServer ).login( loginName, loginPass, initial_folder=mailFolder ) as mailbox:
	dates      = [ msg.date_str for msg in mailbox.fetch( AND( all=True ) ) ]
	senders    = [ msg.from_    for msg in mailbox.fetch( AND( all=True ) ) ]
	recipients = [ msg.to       for msg in mailbox.fetch( AND( all=True ) ) ]
	subjects   = [ msg.subject  for msg in mailbox.fetch( AND( all=True ) ) ]

mails = []
for i in range( len( dates ) ):
	mails.append( [ dates[i], senders[i], recipients[i], subjects[i] ])
	
with open( outFile, 'w', newline='\r\n', header = None ) as csvfile:
	writer = csv.writer( csvfile, dialect=csvDialect )
	for mail in mails:
		writer.writerow( mail )