Domanda

Sto sviluppando un client Gmail leggero per telefoni cellulari, accedendo a Gmail tramite IMAP. Voglio inviare una bozza dalla cartella Bozze, ma ha alcuni allegati e non posso scaricarli tutti per inviarli tramite SMTP.

Spostamento / copia in " Posta inviata " non lo invia, lo sposta solo in quella cartella.

Come posso inviare una bozza direttamente senza recuperare tutto il contenuto e gli allegati dal client? Esiste un comando IMAP per farlo?

È stato utile?

Soluzione

IMAP è un protocollo di cassetta postale. Non supporta (nativamente) l'invio di posta, accedendo solo ad essa. Per inviare la posta devi utilizzare SMTP. È possibile che vi sia un'estensione IMAP per l'invio di posta ed è possibile che Google Mail supporti tale estensione, ma ne dubito. Pertanto, se si desidera inviare un'e-mail con allegati, è necessario disporre effettivamente dell'intero contenuto del messaggio da inviare.

Altri suggerimenti

IMAP è stato progettato per ricevere messaggi e-mail, non per inviarlo. Non esiste un comando IMAP per l'invio di e-mail AFAIK. Esiste tuttavia almeno un server IMAP che supporta una cartella "Posta in uscita" speciale. Quando si inserisce il messaggio in questa cartella, questo verrà inviato automaticamente.

Controlla Documentazione Courier-IMAP sull'invio di posta tramite una connessione IMAP . Si noti che questo è un metodo non standard e non sono a conoscenza di altri server che lo supportano.

C'è RFC 4468 che estende SMTP in modo da poter recuperare il contenuto della posta dal server IMAP , ma non conosco alcuna implementazione funzionante e ampiamente utilizzata.

Parlando di gmail: attenersi a SMTP è probabilmente il modo più sicuro di procedere.

A proposito, ora che qualsiasi client di posta moderno (compresi quelli Web) supporta una cartella Inviata , in genere è necessario utilizzare sia SMTP che IMAP per inviare una singola posta. E c'è una condizione di competizione tra l'invio dell'e-mail su SMTP e il successo nel salvare l'e-mail nella cartella IMAP Inviata . L'uso di IMAP per l'invio di e-mail è un modo per evitare questa condizione di competizione.

L'invio di e-mail è una funzione speciale di alcuni server imap. Non è niente nel protocollo imap. Basta copiare la tua e-mail in una speciale directory imap sul server e li invia. Dubito che Gmail supporti questo.

Ho inviato un'e-mail al mio indirizzo e-mail utilizzando IMAP utilizzando Python 3 a un account Gmail. Ciò che fa è aggiungere un messaggio a una cassetta postale. Devi utilizzare una manciata di librerie native di Python. Studia anche questo documentazione per imaplib , questo codice è descritto nella sezione Caricamento dei messaggi: per aggiungere un nuovo messaggio a una cassetta postale, costruire un'istanza del messaggio e passarlo all'appendice (), insieme al timestamp per il messaggio.

Quindi controlla la tua posta in arrivo di Gmail e vedrai il nuovo messaggio.

import imaplib
import time
import email.message
import imaplib_connect

new_message = email.message.Message()
new_message.set_unixfrom('name')
new_message['Subject'] = 'Test'
new_message['From'] = 'name@gmail.com'
new_message['To'] = 'name@gmail.com'
new_message.set_payload('This is an example message body.\n')

print(new_message)

with imaplib_connect.open_connection() as c:
    c.append('INBOX', '',
             imaplib.Time2Internaldate(time.time()),
             str(new_message).encode('utf-8'))

# Show the headers for all messages in the mailbox
c.select('INBOX')
typ, [msg_ids] = c.search(None, 'ALL')
for num in msg_ids.split():
    typ, msg_data = c.fetch(num, '(BODY.PEEK[HEADER])')
    for response_part in msg_data:
        if isinstance(response_part, tuple):
            print('\n{}:'.format(num))
            print(response_part[1])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top