Как вы можете отправлять почту с помощью IMAP? - PullRequest
23 голосов
/ 27 октября 2009

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

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

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

Ответы [ 5 ]

40 голосов
/ 27 октября 2009

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

13 голосов
/ 27 октября 2009

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

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

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

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

5 голосов
/ 26 декабря 2013

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

1 голос
/ 17 июня 2016

Я отправил электронное письмо на свой адрес электронной почты, используя IMAP, используя Python 3, на учетную запись Gmail. Что делает, это добавляет сообщение в почтовый ящик. Вам нужно использовать несколько собственных библиотек Python. Также изучите эту документацию для imaplib , этот код представлен в разделе Загрузка сообщений: Чтобы добавить новое сообщение в почтовый ящик, создайте экземпляр сообщения и передайте его в 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'] = '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])
1 голос
/ 27 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...