Для того чтобы читать электронные письма, можно использовать вот этот код:
import imaplib import email from email.header import decode_header import webbrowser import os # учетные данные username = "" password = "password" def clean(text): # чистый текст для создания папки return "".join(c if c.isalnum() else "_" for c in text) # create an IMAP4 class with SSL imap = imaplib.IMAP4_SSL("imap.gmail.com") # authenticate imap.login(username, password) status, messages = imap.select("INBOX") # количество популярных писем для получения N = 1 # общее количество писем messages = int(messages[0]) for i in range(messages, messages-N, -1): # fetch the email message by ID res, msg = imap.fetch(str(i), "(RFC822)") for response in msg: if isinstance(response, tuple): # parse a bytes email into a message object msg = email.message_from_bytes(response[1]) # decode the email subject subject, encoding = decode_header(msg["Subject"])[0] if isinstance(subject, bytes): # if it's a bytes, decode to str subject = subject.decode(encoding) # decode email sender From, encoding = decode_header(msg.get("From"))[0] if isinstance(From, bytes): From = From.decode(encoding) print("Subject:", subject) print("From:", From) # if the email message is multipart if msg.is_multipart(): # iterate over email parts for part in msg.walk(): # extract content type of email content_type = part.get_content_type() content_disposition = str(part.get("Content-Disposition")) try: # get the email body body = part.get_payload(decode=True).decode() except: pass if content_type == "text/plain" and "attachment" not in content_disposition: # print text/plain emails and skip attachments print(body) elif "attachment" in content_disposition: # download attachment filename = part.get_filename() if filename: folder_name = clean(subject) if not os.path.isdir(folder_name): # make a folder for this email (named after the subject) os.mkdir(folder_name) filepath = os.path.join(folder_name, filename) # download attachment and save it open(filepath, "wb").write(part.get_payload(decode=True)) else: # extract content type of email content_type = msg.get_content_type() # get the email body body = msg.get_payload(decode=True).decode() if content_type == "text/plain": # print only text email parts print(body) if content_type == "text/html": # if it's HTML, create a new HTML file and open it in browser folder_name = clean(subject) if not os.path.isdir(folder_name): # make a folder for this email (named after the subject) os.mkdir(folder_name) filename = "index.html" filepath = os.path.join(folder_name, filename) # write the file open(filepath, "w").write(body) # open in the default browser webbrowser.open(filepath) print("="*100) # close the connection and logout imap.close() imap.logout()
Как удалить электронные письма в Python?
Для того чтобы удалять электронные письма, можно использовать вот этот код:
import imaplib import email from email.header import decode_header # учетные данные username = "" password = "password" # create an IMAP4 class with SSL imap = imaplib.IMAP4_SSL("imap.gmail.com") # authenticate imap.login(username, password) # select the mailbox I want to delete in # if you want SPAM, use imap.select("SPAM") instead imap.select("INBOX") # поиск определенных писем по отправителю status, messages = imap.search(None, "FROM", "") # преобразовать сообщения в список адресов электронной почты messages = messages[0].split(b' ') try: for mail in messages: _, msg = imap.fetch(mail, "(RFC822)") # вы можете удалить цикл for для повышения производительности, если у вас длинный список писем # потому что он предназначен только для печати SUBJECT целевого электронного письма, которое нужно удалить for response in msg: if isinstance(response, tuple): msg = email.message_from_bytes(response[1]) # расшифровать тему письма subject = decode_header(msg["Subject"])[0][0] if isinstance(subject, bytes): # if it's a bytes type, decode to str subject = subject.decode() print("Deleting", subject) # отметить письмо как удаленное imap.store(mail, "+FLAGS", "\\Deleted") except: print("Все удаленно") # навсегда удалить письма, помеченные как удаленные # из выбранного почтового ящика (в данном случае INBOX) imap.expunge() # закрыть почтовый ящик imap.close() # выйти из аккаунта imap.logout()
Как отправлять электронные письма с Python?
Для того чтобы отправлять электронные письма, можно использовать вот этот код:
import smtplib from email import encoders from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from bs4 import BeautifulSoup as bs # ваши учетные данные email = "uru07082000" password = "password" # электронная почта отправителя FROM = "" # адрес электронной почты получателя TO = "" # тема письма (тема) subject = "Test" # инициализируем сообщение, которое хотим отправить msg = MIMEMultipart("alternative") # установить адрес электронной почты отправителя msg["From"] = FROM # установить адрес электронной почты получателя msg["To"] = TO # задаем тему msg["Subject"] = subject # установить тело письма как HTML html = """ Mail Python! """ # делаем текстовую версию HTML text = bs(html, "html.parser").text text_part = MIMEText(text, "plain") html_part = MIMEText(html, "html") # прикрепить тело письма к почтовому сообщению # сначала прикрепите текстовую версию msg.attach(text_part) msg.attach(html_part) print(msg.as_string()) def send_mail(email, password, FROM, TO, msg): # инициализировать SMTP-сервер server = smtplib.SMTP("smtp.gmail.com", 587) # подключиться к SMTP-серверу в режиме TLS (безопасный) и отправить EHLO server.starttls() # войти в учетную запись, используя учетные данные server.login(email, password) # отправить электронное письмо server.sendmail(FROM, TO, msg.as_string()) # завершить сеанс SMTP server.quit() send_mail(email, password, FROM, TO, msg) Также можно делать рассылки с помощью этого кода: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from bs4 import BeautifulSoup as bs to_list = ['', ''] def send_mail(email, password, FROM, TO, msg): # инициализировать SMTP-сервер server = smtplib.SMTP("smtp.gmail.com", 587) # подключиться к SMTP-серверу в режиме TLS (безопасный) и отправить EHLO server.starttls() # войти в учетную запись, используя учетные данные server.login(email, password) # отправить электронное письмо server.sendmail(FROM, TO, msg.as_string()) # завершить сеанс SMTP server.quit() for recipient in to_list: # ваши учетные данные email = "" password = "password" # электронная почта отправителя FROM = "" # адрес электронной почты получателя TO = recipient # тема письма (тема) subject = "Прикол" # инициализируем сообщение, которое хотим отправить msg = MIMEMultipart("alternative") # установить адрес электронной почты отправителя msg["From"] = FROM # установить адрес электронной почты получателя msg["To"] = TO # задаем тему msg["Subject"] = subject # установить тело письма как HTML html = """ Рассылка - Пока!!!!! """ # делаем текстовую версию HTML text = bs(html, "html.parser").text text_part = MIMEText(text, "plain") html_part = MIMEText(html, "html") # прикрепить тело письма к почтовому сообщению # сначала прикрепите текстовую версию msg.attach(text_part) msg.attach(html_part) # отправить почту send_mail(email, password, FROM, TO, msg)