Pregunta

Estoy desarrollando un cliente ligero de Gmail para teléfonos móviles, accediendo a Gmail por IMAP. Quiero enviar un borrador desde la carpeta Borradores, pero tiene algunos archivos adjuntos y no puedo descargarlos todos para enviarlos por SMTP.

Moverlo / copiarlo a " Correo enviado " no lo envía, solo lo mueve a esa carpeta.

¿Cómo puedo enviar un borrador directamente sin obtener todo el contenido y los archivos adjuntos del cliente? ¿Hay algún comando IMAP para hacerlo?

¿Fue útil?

Solución

IMAP es un protocolo de buzón. No admite (de forma nativa) el envío de correo, solo accede a él. Para enviar correo, debe usar SMTP. Es posible que exista una extensión IMAP para enviar correo, y es posible que Google Mail sea compatible con esa extensión, pero lo dudo. Por lo tanto, si desea enviar un correo electrónico con archivos adjuntos, debe tener el contenido completo del mensaje disponible para enviar.

Otros consejos

IMAP fue diseñado para recibir mensajes de correo electrónico, no para enviarlo. No hay un comando IMAP para enviar correos electrónicos AFAIK. Sin embargo, hay al menos un servidor IMAP que admite una carpeta especial 'Bandeja de salida'. Cuando coloque el mensaje en esta carpeta, se enviará automáticamente.

Verifique Documentación de mensajería-IMAP sobre el envío de correo a través de una conexión IMAP . Tenga en cuenta que este es un método no estándar y no conozco ningún otro servidor que lo admita.

Hay RFC 4468 que extiende SMTP para que pueda recuperar el contenido del correo del servidor IMAP , pero no conozco ninguna implementación que funcione y sea ampliamente utilizada.

Hablando de gmail: seguir con SMTP es probablemente la forma más segura de hacerlo.

Por cierto, ahora que cualquier cliente de correo moderno (incluidos los basados ??en la web) admite una carpeta Enviado , normalmente tiene que usar SMTP e IMAP para enviar un solo correo. Y hay una condición de carrera entre enviar el correo electrónico a través de SMTP y exitosamente guardar el correo electrónico en la carpeta IMAP Enviado . Usar IMAP para enviar correos electrónicos es una forma de evitar esta condición de carrera.

El envío de correo electrónico es una característica especial de algunos servidores imap. No es nada en el protocolo imap. Simplemente copie su correo electrónico en un directorio imap especial en el servidor y los enviará. Dudo que gmail lo admita.

Envié un correo electrónico a mi propia dirección de correo electrónico usando IMAP usando Python 3 a una cuenta de gmail. Lo que hace es agregar un mensaje a un buzón. Debe utilizar un puñado de bibliotecas nativas de Python. También estudie esto documentación para imaplib , este código aparece en la sección Carga de mensajes: para agregar un nuevo mensaje a un buzón, cree una instancia de Mensaje y páselo al anexo (), junto con la marca de tiempo del mensaje.

Luego revise su bandeja de entrada de gmail y verá el nuevo mensaje.

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])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top