Question

Je développe un client Gmail léger pour les téléphones mobiles, en accédant à Gmail via IMAP. Je souhaite envoyer un brouillon à partir du dossier Brouillons, mais celui-ci contient des pièces jointes et je ne peux pas tout télécharger pour les envoyer par SMTP.

Déplacement / copie dans " Messages envoyés " ne l'envoie pas, le déplace simplement dans ce dossier.

Comment puis-je envoyer un brouillon directement sans extraire tout le contenu et les pièces jointes du client? Existe-t-il une commande IMAP pour le faire?

Était-ce utile?

La solution

IMAP est un protocole de boîte aux lettres. Il ne prend pas (nativement) en charge l’envoi de courrier, mais seulement son accès. Pour envoyer un courrier, vous devez utiliser le protocole SMTP. Il est possible qu’il existe une extension IMAP pour l’envoi de courrier et que Google Mail prenne en charge cette extension, mais j'en doute. Par conséquent, si vous souhaitez envoyer un courrier électronique avec des pièces jointes, vous devez disposer du contenu complet du message.

Autres conseils

IMAP a été conçu pour recevoir des messages électroniques, pas pour les envoyer. Il n'y a pas de commande IMAP pour l'envoi de courrier électronique AFAIK. Il existe toutefois au moins un serveur IMAP prenant en charge un dossier spécial "Boîte d'envoi". Lorsque vous placez le message dans ce dossier, il sera envoyé automatiquement.

Consultez la documentation Courier-IMAP sur l'envoi de courrier via une connexion IMAP . Notez qu’il s’agit d’une méthode non standard et que je ne connais aucun autre serveur prenant en charge cette fonctionnalité.

La RFC 4468 étend le protocole SMTP pour qu'il puisse extraire le contenu du courrier du serveur IMAP. , mais je ne connais aucune implémentation efficace et largement utilisée.

Parler de gmail: rester sur SMTP est probablement le moyen le plus sûr.

En passant, maintenant que tout client de messagerie moderne (y compris ceux basés sur le Web) prend en charge un dossier Envoyé , vous devez généralement utiliser SMTP et IMAP pour envoyer un seul courrier. Et il existe une condition de concurrence entre l'envoi du courrier électronique via SMTP et l'enregistrement avec succès du courrier électronique dans le dossier Envoyé du protocole IMAP. Utiliser IMAP pour envoyer des courriers électroniques est un moyen d’éviter cette situation critique.

L’envoi de courrier électronique est une fonctionnalité spéciale de certains serveurs imap. Ce n'est rien dans le protocole imap. Vous copiez simplement votre courrier électronique dans un répertoire imap spécial sur le serveur et celui-ci les envoie. Je doute que Gmail le supporte.

J'ai envoyé un email à ma propre adresse email en utilisant IMAP en utilisant Python 3 vers un compte gmail. Ce qui est fait est d'ajouter un message à une boîte aux lettres. Vous devez utiliser une poignée de bibliothèques natives de Python. Etudiez également cette documentation pour imaplib , ce code est présenté dans la section Chargement de messages: pour ajouter un nouveau message à une boîte aux lettres, créez une instance de message et transmettez-la à l'ajout. (), ainsi que l’horodatage du message.

Vérifiez ensuite votre boîte de réception Gmail et vous verrez le nouveau message.

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])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top