· 4 years ago · Feb 06, 2021, 10:50 PM
1# Python 3.8.0
2import smtplib
3import time
4import imaplib
5import email
6import traceback
7import urllib.request
8import urllib.response
9from itertools import chain
10
11ORG_EMAIL = "@gmail.com"
12FROM_EMAIL = "giuseppe.paolino21" + ORG_EMAIL
13FROM_PWD = "test.1234"
14SMTP_SERVER = "imap.gmail.com"
15SMTP_PORT = 993
16
17#Funzione per trovare tutte le ricorrenze di una sottostringa
18def find_all(a_str, sub):
19 start = 0
20 while True:
21 start = a_str.find(sub, start)
22 if start == -1: return
23 yield start
24 start += len(sub)
25
26
27def read_email_from_gmail():
28 try:
29 #Connessione al server imap
30 mail = imaplib.IMAP4_SSL(SMTP_SERVER)
31 mail.login(FROM_EMAIL,FROM_PWD)
32 mail.select('inbox')
33
34 data = mail.search(None, 'ALL')
35 mail_ids = data[1]
36 id_list = mail_ids[0].split()
37 latest_email_id = int(id_list[-1])
38
39 data = mail.fetch(str(latest_email_id), '(RFC822)' )
40
41 for response_part in data:
42 arr = response_part[0]
43
44 if isinstance(arr, tuple):
45 msg = email.message_from_string(str(arr[1],'utf-8')) #leggo tutto il contenuto della mail
46 email_subject = msg['subject'] #Mittente
47 email_from = msg['from'] #Oggetto
48 print('From : ' + email_from + '\n')
49 print('Subject : ' + email_subject + '\n')
50
51 #Leggo il contenuto della mail
52 if msg.is_multipart(): #se il messaggio è composto da diverse parti le leggo tutte
53 for payload in msg.get_payload():
54 p = payload.get_payload() #salvo il body della mail in p
55 linkPos = list(find_all(p, "http")) #Cerco l'intestazione dei link
56 else:
57 p = msg.get_payload() #se il messaggio è unico leggo tutto il contenuto e lo inserisco in p
58 linkPos = list(find_all(p, "http")) #Cerco i link di bidoo
59
60 links = [] #salvo tutti i link in una lista (links)
61
62 for i in range(len(linkPos)):
63 p_1 = str(p[linkPos[i]:])
64 p_1.replace(r"=\r\n", "") #rimuovo le escape sequences (NON FUNZIONA!!!)
65 p_1.replace("=3D", "") #rimuovo caratteri "sporchi" (NON FUNZIONA!!!)
66 eol = p_1.find("\">")
67 links.append(p_1[0:eol])
68
69 #Leggo l'expanded URL (NON FUNZIONA PER LA PRESENZA DI CARATTERI SPECIALI O ESCAPE SEQ.)
70 #for i in range(len(links)):
71 # str(links[i]).replace(r"\r\n", "")
72 # with urllib.request.urlopen(str(links[i])) as conn:
73 # links[i] = conn.geturl()"""
74 print(links)
75
76 except Exception as e:
77 traceback.print_exc()
78 print(str(e))
79
80read_email_from_gmail()