MCPcopy
hub / github.com/PySimpleGUI/PySimpleGUI / read_mail

Function read_mail

DemoPrograms/Demo_Desktop_Widget_Email_Notification.py:72–112  ·  view source on GitHub ↗

Reads late emails from IMAP server and displays them in the Window :param window: window to display emails in :return:

(window)

Source from the content-addressed store, hash-verified

70
71
72def read_mail(window):
73 """
74 Reads late emails from IMAP server and displays them in the Window
75 :param window: window to display emails in
76 :return:
77 """
78 mail = imaplib.IMAP4_SSL(IMAP_SERVER)
79
80 (retcode, capabilities) = mail.login(LOGIN_EMAIL, LOGIN_PASSWORD)
81 mail.list()
82 typ, data = mail.select('Inbox')
83 n = 0
84 now = datetime.now()
85 # get messages from today
86 search_string = '(SENTON {}-{}-{})'.format(now.day,
87 calendar.month_abbr[now.month], now.year)
88 (retcode, messages) = mail.search(None, search_string)
89 if retcode == 'OK':
90 # message numbers are separated by spaces, turn into list
91 msg_list = messages[0].split()
92 msg_list.sort(reverse=True) # sort messages descending
93 for n, message in enumerate(msg_list):
94 if n >= MAX_EMAILS:
95 break
96
97 from_elem = window['{}from'.format(n)]
98 date_elem = window['{}date'.format(n)]
99 from_elem.update('') # erase them so you know they're changing
100 date_elem.update('')
101 window.refresh()
102
103 typ, data = mail.fetch(message, '(RFC822)')
104 for response_part in data:
105 if isinstance(response_part, tuple):
106
107 original = email.message_from_bytes(response_part[1])
108 date_str = original['Date'][:22]
109
110 from_elem.update(original['From'])
111 date_elem.update(date_str)
112 window.refresh() # make the window changes show up right away
113
114
115red_x = "R0lGODlhEAAQAPeQAIsAAI0AAI4AAI8AAJIAAJUAAJQCApkAAJoAAJ4AAJkJCaAAAKYAAKcAAKcCAKcDA6cGAKgAAKsAAKsCAKwAAK0AAK8AAK4CAK8DAqUJAKULAKwLALAAALEAALIAALMAALMDALQAALUAALYAALcEALoAALsAALsCALwAAL8AALkJAL4NAL8NAKoTAKwbAbEQALMVAL0QAL0RAKsREaodHbkQELMsALg2ALk3ALs+ALE2FbgpKbA1Nbc1Nb44N8AAAMIWAMsvAMUgDMcxAKVABb9NBbVJErFYEq1iMrtoMr5kP8BKAMFLAMxKANBBANFCANJFANFEB9JKAMFcANFZANZcANpfAMJUEMZVEc5hAM5pAMluBdRsANR8AM9YOrdERMpIQs1UVMR5WNt8X8VgYMdlZcxtYtx4YNF/btp9eraNf9qXXNCCZsyLeNSLd8SSecySf82kd9qqc9uBgdyBgd+EhN6JgtSIiNuJieGHhOGLg+GKhOKamty1ste4sNO+ueenp+inp+HHrebGrefKuOPTzejWzera1O7b1vLb2/bl4vTu7fbw7ffx7vnz8f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJAALAAAAAAQABAAAAjUACEJHEiwYEEABniQKfNFgQCDkATQwAMokEU+PQgUFDAjjR09e/LUmUNnh8aBCcCgUeRmzBkzie6EeQBAoAAMXuA8ciRGCaJHfXzUMCAQgYooWN48anTokR8dQk4sELggBhQrU9Q8evSHiJQgLCIIfMDCSZUjhbYuQkLFCRAMAiOQGGLE0CNBcZYmaRIDLqQFGF60eTRoSxc5jwjhACFWIAgMLtgUocJFy5orL0IQRHAiQgsbRZYswbEhBIiCCH6EiJAhAwQMKU5DjHCi9gnZEHMTDAgAOw=="

Callers 1

guiFunction · 0.85

Calls 3

selectMethod · 0.80
refreshMethod · 0.80
updateMethod · 0.45

Tested by

no test coverage detected