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

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

如何直接发送草稿而不从客户端获取所有内容和附件?有没有 IMAP 命令可以做到这一点?

有帮助吗?

解决方案

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

其他提示

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

查看 有关通过 IMAP 连接发送邮件的 Courier-IMAP 文档. 。请注意,这是一种非标准方法,我不知道有任何其他服务器支持此方法。

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

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

顺便说一句,现在任何现代邮件客户端(包括基于网络的客户端)都支持 发送 文件夹中,您通常必须同时使用 SMTP 和 IMAP 来发送一封邮件。通过 SMTP 发送电子邮件和 成功地 将电子邮件保存到 IMAP 发送 文件夹。使用 IMAP 发送电子邮件是避免这种竞争情况的一种方法。

发送电子邮件是某些 imap 服务器的一项特殊功能。imap 协议中没有任何内容。您只需将电子邮件复制到服务器上的特殊 imap 目录中,它就会发送它们。我怀疑gmail是否支持这个。

我使用 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'] = '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