Как вы можете отправлять почту с помощью IMAP?
Вопрос
Я занимаюсь разработкой облегченного клиента 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])