Подтвердить что ты не робот

Как вы можете отправлять почту с помощью IMAP?

Я занимаюсь разработкой облегченного клиента Gmail для мобильных телефонов, получающего доступ к Gmail по IMAP. Я хочу отправить черновик из папки "Черновики", но в нем есть некоторые вложения, и я не могу загрузить их все для отправки по SMTP.

Перемещение/копирование в "Отправленные" не отправляет, а просто перемещает в эту папку.

Как я могу отправить черновик напрямую, не загружая все содержимое и вложения с клиента? Есть ли команда IMAP, чтобы сделать это?

4b9b3361

Ответ 1

IMAP - это протокол почтовых ящиков. Он не поддерживает (по сути) отправку почты, а только ее доступ. Для отправки почты вы должны использовать SMTP. Возможно, что для отправки почты есть расширение IMAP, и возможно, что Google Mail поддерживает это расширение, но я сомневаюсь. Следовательно, если вы хотите отправить электронное письмо с вложениями, вы должны на самом деле иметь полный текст сообщения, доступного вам для отправки.

Ответ 2

IMAP был разработан для получения сообщений электронной почты, а не для его отправки. Нет команды IMAP для отправки электронной почты AFAIK. Однако есть по крайней мере один IMAP-сервер, который поддерживает специальную папку "Исходящие". Когда вы помещаете сообщение в эту папку, оно будет отправлено автоматически.

Проверьте документацию Courier-IMAP об отправке почты через соединение IMAP. Обратите внимание, что это нестандартный метод, и я не знаю ни одного другого сервера, который бы это поддерживал.

Есть RFC 4468, который расширяет SMTP, чтобы он мог получать почтовый контент с сервера IMAP, но я не знаю ни о какой работающей и широко используемой реализации.

Говоря о Gmail: придерживаться SMTP, вероятно, самый безопасный путь.

Ответ 3

Кстати, теперь, когда любой современный почтовый клиент (включая веб-сайты) поддерживает папку Sent, вы, как правило, должны использовать как SMTP, так и IMAP для отправки одной почты. И есть условие гонки между отправкой электронной почты через SMTP и успешным сохранением электронной почты в папку IMAP Sent. Использование IMAP для отправки электронной почты - способ избежать этого состояния гонки.

Ответ 4

Отправка электронной почты является особенностью некоторых IMAP-серверов. Его ничего в протоколе imap. Вы просто копируете свою электронную почту в специальную папку imap на сервере, и она отправляет их. Я сомневаюсь, что gmail поддерживает это.

Ответ 5

Я отправил электронное письмо на свой собственный адрес электронной почты, используя IMAP, используя Python 3 для учетной записи gmail. Что такое добавление сообщения в почтовый ящик. Вам нужно использовать несколько собственных библиотек Python. Также изучите эту документацию для imaplib, этот код показан в разделе Загрузка сообщений:. Чтобы добавить новое сообщение в почтовый ящик, создайте экземпляр Message и передайте его методу append() вместе с меткой времени для сообщения.

Затем проверьте свой почтовый ящик gmail, и вы увидите новое сообщение.

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