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

StackOverflow https://stackoverflow.com/questions/1627596

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

Затем проверьте свой почтовый ящик 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])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top