如何使用IMAP发送邮件?

时间:2009-10-26 22:04:09

标签: smtp gmail imap

我正在为移动电话开发轻量级Gmail客户端,通过IMAP访问Gmail。我想从草稿文件夹中发送草稿,但它有一些附件,我无法下载所有这些附件以通过SMTP发送。

将其移动/复制到“已发邮件”不会发送它,只是将其移动到该文件夹​​。

如何在不从客户端获取所有内容和附件的情况下直接发送草稿?有没有IMAP命令呢?

5 个答案:

答案 0 :(得分:40)

IMAP是邮箱协议。它(本机地)不支持发送邮件,只访问它。要发送邮件,您必须使用SMTP。可能有一个用于发送邮件的IMAP扩展,并且Google Mail可能支持该扩展,但我对此表示怀疑。因此,如果您要发送带附件的电子邮件,您实际上必须拥有可供您发送的邮件的完整内容。

答案 1 :(得分:13)

IMAP旨在接收电子邮件,而不是发送电子邮件。没有用于发送电子邮件AFAIK的IMAP命令。但是,至少有一个IMAP服务器支持特殊的“发件箱”文件夹。当您将邮件放入此文件夹时,它将自动发送。

检查Courier-IMAP documentation on Sending mail via an IMAP connection。请注意,这是一种非标准方法,我不知道任何支持此功能的服务器。

RFC 4468扩展SMTP以便它可以从IMAP服务器获取邮件内容,但我不知道任何有效且广泛使用的实现。

谈论Gmail:坚持使用SMTP可能是最安全的方式。

答案 2 :(得分:5)

顺便说一下,现在任何现代邮件客户端(包括基于Web的客户端)都支持 Sent 文件夹,您通常必须同时使用SMTP和IMAP发送单个邮件。通过SMTP发送电子邮件和成功将电子邮件保存到IMAP 已发送文件夹之间存在竞争条件。使用IMAP发送电子邮件是避免这种竞争条件的一种方法。

答案 3 :(得分:1)

发送电子邮件是某些imap服务器的一项特殊功能。它在imap协议中没什么。您只需将电子邮件复制到服务器上的特殊imap目录中即可发送。我怀疑gmail支持这个。

答案 4 :(得分:1)

我使用IMAP将一封电子邮件发送到我自己的电子邮件地址,使用Python 3到一个Gmail帐户。做什么是将邮件附加到邮箱。您需要使用一些Python的本机库。还要研究这个documentation for 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'] = '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])
相关问题