70 lines
2 KiB
Python
70 lines
2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from imaplib import IMAP4_SSL
|
|
from subprocess import check_output
|
|
from sys import argv, exit
|
|
from time import time
|
|
|
|
if len(argv) < 5:
|
|
print('Usage: {} <imap host> <username> <password> <message sender>'.format(argv[0]))
|
|
exit(3)
|
|
|
|
NOW = time()
|
|
|
|
try:
|
|
imap = IMAP4_SSL(argv[1])
|
|
imap.login(argv[2], argv[3])
|
|
|
|
imap.select('Inbox')
|
|
|
|
_, data = imap.search(None, 'ALL')
|
|
|
|
something_found = False
|
|
|
|
for item in data:
|
|
for index in item.split():
|
|
received_in_this_mail = None
|
|
from_in_this_mail = False
|
|
|
|
try:
|
|
message = imap.fetch(index, '(RFC822)')
|
|
|
|
message_text = bytearray()
|
|
for part in message[1][0]:
|
|
message_text.extend(part)
|
|
message_text = message_text.decode().splitlines()
|
|
|
|
for line in message_text:
|
|
lline = line.strip().lower()
|
|
|
|
if lline.startswith('from:') and argv[4].lower() in line:
|
|
from_in_this_mail = True
|
|
|
|
if lline.startswith('date:'):
|
|
date = line.strip()[5:].strip()
|
|
unixtime = int(check_output([
|
|
'date',
|
|
'--date={}'.format(date),
|
|
'+%s',
|
|
]).decode().strip())
|
|
|
|
if unixtime > (NOW-(60*60*25)):
|
|
received_in_this_mail = date
|
|
|
|
if received_in_this_mail and from_in_this_mail:
|
|
print('Found message from "{}" sent at "{}"'.format(argv[4], received_in_this_mail))
|
|
received_in_this_mail = None
|
|
from_in_this_mail = False
|
|
something_found = True
|
|
except:
|
|
pass
|
|
|
|
if something_found:
|
|
# there should be output above
|
|
exit(0)
|
|
|
|
print('No Mails found')
|
|
exit(2)
|
|
except Exception as e:
|
|
print(repr(e))
|
|
exit(3)
|