¿Cómo se puede enviar correo utilizando IMAP?


Estoy desarrollando un cliente ligero de Gmail para teléfonos móviles. Accede a Gmail por IMAP. Luego 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?

Author: Kiquenet, 2009-10-27

5 answers

IMAP es un protocolo de buzón. No admite (de forma nativa) el envío de correo, solo el acceso a él. Para enviar correo, debe usar SMTP. Es posible que haya una extensión IMAP para enviar correo, y es posible que Google Mail soporte 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.

 37
Author: Jherico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 22:46:35

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

Compruebe La documentación de Courier-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 estoy al tanto de ningún otro servidor que lo soporte.

Hay RFC 4468 que extiende SMTP para que pueda obtener el contenido del correo desde el servidor IMAP, pero no conozco ninguna implementación que funcione y se use ampliamente.

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

 13
Author: Martin Vobr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-15 10:19:15

Por cierto, ahora que cualquier cliente de correo moderno (incluidos los basados en web) soporta una carpeta Sent, 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 con éxitoguardar el correo electrónico en la carpeta IMAP Sent. Usar IMAP para enviar e-mail es una forma de evitar esta condición de carrera.

 5
Author: Pavel Šimerda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 19:01:19

Enviar correo electrónico es una característica especial de algunos servidores imap. No está en el protocolo imap. Simplemente copie su correo electrónico en un directorio imap especial en el servidor y éste los envía. Dudo que gmail apoye esto.

 1
Author: Wienczny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 23:31:46

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 añadir un mensaje a un buzón. Necesita utilizar un puñado de bibliotecas nativas de Python. También estudie esta documentación para imaplib, este código aparece en la sección Cargando mensajes: Para agregar un nuevo mensaje a un buzón, construya una instancia de Mensaje y pásela al método append (), junto con la marca de tiempo para el mensaje.

Luego revisa tu gmail bandeja de entrada y verás 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'] = '[email protected]'
new_message['To'] = '[email protected]'
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])
 1
Author: Joansy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-17 20:40:45