Leggere la posta di "ieri" di una casella iMap con Python

di il
11 risposte

Leggere la posta di "ieri" di una casella iMap con Python

Buongiorno, ho provato parecchi esempi in Python per poter scaricare la mail , la maggior parte non funzionano; quello che funziona parte delle mail del 2020, a me servono quelle di ieri .

Di ieri, filtrati in una certa casella e da un certo mittente preciso… più che la mail mi servirebbe uno degli allegati in excel.

import smtplib
oggetto = "Subject: Urgente! da leggere subito!\n\n"
contenuto = "connettiti al Server che è meglio..."
messaggio = oggetto + contenuto
email = smtplib.SMTP("smtp.gmail.com", 587)
email.ehlo()
email.starttls()
email.login("******.it", '******')
email.sendmail(******.it", "yyygmail.com", messaggio)
email.quit()

Queso non funziona.

Grazie a chi volesse aiutarmi.

11 Risposte

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    08/08/2023 - Trescon ha scritto:


    ho provato parecchi esempi in Python per poter scaricare la mail , la maggior parte non funzionano

    Scaricare mail da quale provider? e con quale protocollo?

    08/08/2023 - Trescon ha scritto:


    quello che funziona parte delle mail del 2020, a me servono quelle di ieri .

    Se funziona il recupero di mail di un certo anno, basta filtrare quelle con la data che ti interessa, no?
    Posta il codice da modificare.

    08/08/2023 - Trescon ha scritto:


    Di ieri, filtrati in una certa casella e da un certo mittente preciso…

    Un problema alla volta, fermo restando che - a meno di non avere una interfaccia dedicata - dubito che tu possa fare questo tipo di filtro senza prima scaricare comunque tutti i messaggi e poi elaborarne il contenuto, ma (come predetto) dipende anche dal protocollo e dal resto.

    Bisogna fare chiarezza sul contesto.

    08/08/2023 - Trescon ha scritto:


    Queso non funziona.

    Quel codice non scarica messaggi, ma li invia: parla con un server SMTP, ovvero con un server di posta in uscita.

    La situazione qui è abbastanza confusa.

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Grazie Alka e scusa per l’imprecisione non specificata.

    Allora il server e un server di posta aziendale con protocollo imap.

    L’esempio era per riportare un codice trovato in rete per inviare una mail in imap e chiedere supporto perché non va.

    Io comunque la posta la devo leggere , da uno specifico mittente 

    Grazie, per il codice da “modificare” lo posto dopo che accendo il pc.

    Intanto grazie

    Alberto

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Siccome su internet si trovano praticamente solo (o quasi) esempi per invio mail pensavo di testare l’invio e poi da lì cercare di aggiungere la ricezione.

    Ma molti esempi smtp trovati in rete x .Gmail non funzionano e non conoscendo la libreria smtplib non so come correggere.

    Chiaramente per me , ignorante, una proceeura imap e ‘ imap … quindi “dovrebbe” andare con qualsiasi casella imap……. O no ?.

    Grazie

    Alberto

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    08/08/2023 - Trescon ha scritto:


    Siccome su internet si trovano praticamente solo (o quasi) esempi per invio mail pensavo di testare l’invio e poi da lì cercare di aggiungere la ricezione.

    Ma molti esempi smtp trovati in rete x .Gmail non funzionano e non conoscendo la libreria smtplib non so come correggere.

    Chiaramente per me , ignorante, una proceeura imap e ‘ imap … quindi “dovrebbe” andare con qualsiasi casella imap……. O no ?.

    Grazie

    Alberto

    La libreria smtp serve solo per l'invio. GMail è un pessimo esempio, dato che ha millanta controlli per l'invio e per la lettura richiede l'autenticazione OAuth2.

    Guarda questo progetto https://pypi.org/project/imap-mailbox/, è ancora in sviluppo ma dovrebbe fare quello che cerchi.

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Grazie Alka e scusa per l’imprecisione non specificata.

    Allora il server e un server di posta aziendale con protocollo imap.

    L’esempio era per riportare un codice trovato in rete per inviare una mail in imap e chiedere supporto perché non va.

    Io comunque la posta la devo leggere , da uno specifico mittente 

    Grazie, per il codice da “modificare” lo posto dopo che accendo il pc.

    Intanto grazie

    Alberto

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    08/08/2023 - Andrea Quaglia ha scritto:


    08/08/2023 - Trescon ha scritto:


    Siccome su internet si trovano praticamente solo (o quasi) esempi per invio mail pensavo di testare l’invio e poi da lì cercare di aggiungere la ricezione.

    Ma molti esempi smtp trovati in rete x .Gmail non funzionano e non conoscendo la libreria smtplib non so come correggere.

    Chiaramente per me , ignorante, una proceeura imap e ‘ imap … quindi “dovrebbe” andare con qualsiasi casella imap……. O no ?.

    Grazie

    Alberto

    La libreria smtp serve solo per l'invio. GMail è un pessimo esempio, dato che ha millanta controlli per l'invio e per la lettura richiede l'autenticazione OAuth2.

    Guarda questo progetto https://pypi.org/project/imap-mailbox/, è ancora in sviluppo ma dovrebbe fare quello che cerchi.

    Grazie Andrea per il suggerimento, domani provo e spero che funzioni.

    Alberto

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Salve Andrea, io ho usato il seguente esempio dellalibreria da lei suggerita.

    Ora dovrei selezionare la cartella e il giorno della mail, ma essendo un novellino ho provato a “giocare” con le funzioni della lib ma non sono arrivato a nulla.

    Mi potrebbe indicare come si  richiamano le funzioni in maniera corretta.

    Grazie

    Alberto

            print(f"Subject: {message['import imap_mailbox
    
    # connect to the IMAP server
    with imap_mailbox.IMAPMailbox('imap.example.com', 'username', 'password') as mailbox:
        
        # select the INBOX folder
        mailbox.select('INBOX')
        
        # iterate over messages in the folder
        for message in mailbox:
            print(f"From: {message['From']}")
            print(f"Subject: {message['Subject']}")
  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Non posso aiutarti più di tanto, è una libreria che ho trovato con una semplice ricerca in pypi.org e che magari userò in futuro.

    Comunque c'è la documentazione con l'elenco delle API. Secondo me ti servono queste tre API:

    IMAPMailbox.list_folders(self)
    IMAPMailbox.current_folder
    IMAPMailbox.select(self, folder)

    https://medecau.github.io/imap_mailbox/imap_mailbox.html#IMAPMailbox.list_folders

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Di base dovrebbe andare una cosa del genere:

    import imap_mailbox
    
    with imap_mailbox.IMAPMailbox('in.virgilio.it', '******@virgilio.it', '******', port=993, security='SSL') as virgiliomail:
        virgiliomail.select('INBOX')
        folders = virgiliomail.list_folders()
        for folder in folders:
            print(folder)
    
        # cerco la posta di ieri
        uids = virgiliomail.search('YESTERDAY')
        for msg_id in uids:
            msg = imap_mailbox.IMAPMessage.from_uid(uid=msg_id, mailbox=virgiliomail)
            print(msg['From'])
            print(msg['Subject'])

    In teoria dovrebbe funzionare, ma a me dà un errore quando deve leggere i messaggi (non so se dipende da imap_mailbox o da come imposto la lettura). Comunque i messaggi di ieri li trova.

  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Io ho provato questo perchè mi fa vedere il mittente, l'oggetto , la data (questa l'ho aggiunta io) , l'allegato (an che questo l'ho aggiunto io) ; funziona tutto a parte il file allegato.

    Nelle mail “scansionate” cisono anche degli allegati ma il programmino mi risponde “none”.

    Se io promo a stampare la variabile message vedo tutto il contenuto letto, compreso i campi che io chiedo di stampare, pero non vedo l'allegato….. sapresti aiutarmi.

    Grazie

    import imap_mailbox
    
    # connect to the IMAP server
    with imap_mailbox.IMAPMailbox('mail.****.it', '**dita@****.it', 'xxyyzz') as mailbox:
        
        # select the INBOX folder
        mailbox.select('INBOX.giove.Assistenza')
        
        # iterate over messages in the folder
        for message in mailbox:
            print(f"From: {message['From']}")
            print(f"Subject: {message['Subject']}")
            print(f"Date: {message['Date']}")
            print(f"Attach: {message['Attach']}")
        #    print(message)
    
    
  • Re: Leggere la posta di "ieri" di una casella iMap con Python

    Imap_mailbox è una versione alpha, quindi probabilmente è incompleta. E' un wrapper (quasi sicuramente) per la classe standard imaplib.

    In PyPI c'è un altro progetto che mi sembra più maturo, https://pypi.python.org/pypi/imap_tools/ che dovrebbe avere le caratteristiche che cerchi, ma sembra più complesso da usare.

Devi accedere o registrarti per scrivere nel forum
11 risposte