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

di Trescon il
11 risposte

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

  • 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.

  • 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

  • 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

  • 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 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

  • 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

  • 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']}")
  • 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.

  • 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)
    
    
  • 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