Portál AbcLinuxu, 14. května 2025 02:17
Pěkný den (noc),
řeším triviální problém - potřebuji mít možnost voláním programu zjišťovat, zda je v mém mailboxu nový mail. Nic víc. Čekal jsem, že to vyřeším raz dva, a ejhle... biff
, xbiff
ani newmail
mi nevyhovují, chovají se moc "po svém". Já potřebuju jenom zjistit návratovou hodnotu a podle ní vytisknout v promptu něco jako "NEPŘEČTENÝ MAIL". Je to oříšek, nechce se mi cyklem ověřovat časovou známku či velikost mailboxu. comsat
je strašně špatně dokumentovaný. Je tu nějaké čisté, prosté řešení, které jsem přehlédnul? Děkuji
#!/usr/bin/env python import poplib, time, getpass, sys user = "username" pop3server = "pop3.seznam.cz" password = getpass.unix_getpass("Password for "+user+"@"+pop3server+":"); messages_prev = 0 while(1): try: M = poplib.POP3(pop3server) M.user(user) M.pass_(password) except poplib.error_proto, detail: print "Error occured", sys.exc_info()[0], detail continue res = M.stat() messages = res[0] M.quit() if (messages != messages_prev): print time.strftime("%H:%M:%S %d.%m.%Y"),": ", messages, "Messages\a" messages_prev = messages time.sleep(120)a něco podobného se dá udělat i pro IMAP, na což jsem dělal applet:
checknewmail.sh #!/bin/sh mtime=`stat -c%Y \$MAIL` atime=`stat -c%X \$MAIL` exit `test $atime -lt $mtime`A potom někde použít:
checknewmail.sh && echo "Máte nový mail"
#!/usr/bin/python from pyinotify import WatchManager, Notifier, EventsCodes, ProcessEvent import sys, pwd, os, posix username = pwd.getpwuid(posix.getuid()).pw_name path = os.path.join('/var/mail', username) mask = EventsCodes.IN_MODIFY | EventsCodes.IN_CLOSE_WRITE class mailPE(ProcessEvent): def __init__(self): self.was_modified = False self.was_closed = False def process_IN_CLOSE_WRITE(self, event): self.was_closed = True def process_IN_MODIFY(self, event): self.was_modified = True wm = WatchManager() mbox = mailPE() notifier = Notifier(wm, mbox) wm.add_watch(path, mask) while True: notifier.read_events() notifier.process_events() if mbox.was_closed and mbox.was_modified: breakNení nutné periodicky zjišťovat změnu něčeho, když tu máme takovou jadernou vymoženost. Proces celou dobu spí, ale přitom je schopen reagovat okamžitě.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.