如何在 Linux shell 上从 IMAP 服务器中删除电子邮件?

如何在 Linux shell 上从 IMAP 服务器中删除电子邮件?

这个问题已根据建议复制这个 在StackOverflow,只要是编程问题,但似乎依赖于Linux工具。我将在两个地方发布解决方案的链接(如果找到)。

我不太了解IMAP 邮件,因为我一直使用POP3。但删除电子邮件通过使用 Windows 电子邮件客户端中包含的工具,可以从 POP3 邮件服务器发送邮件,例如球棒!

但现在我的工作有了新的IMAP 帐户有一个愚蠢的问题:有时来自我的域(部分)之外的电子邮件@myenterprise.com不会到达,并且想要编写一些方法来检测它。

只是一个简单的外壳脚本(在脚本编写方面,Linux 对我来说是非常首选的)从外部帐户发送定期电子邮件并检查它们是否正确到达就足够了,但如果我安排它每小时运行一次......好吧,几天后我垃圾邮件中会有很多Subject:Test电子邮件。因此,解决方案是在检查后从 IMAP 服务器中删除它们。

我怎么能够删除来自我的特定电子邮件IMAP服务器来自Linux外壳以可编写脚本的方式?

如果解决方案是特定的,则首选 Bash shell。

答案1

我会选择 Python 脚本。以下脚本请求 IMAP 服务器、用户名和密码以及主题字符串。然后,它列出主题包含给定主题字符串的所有邮件。

评论在行里imapserver.store(num, '+FLAGS', '\已删除')当你对行为感到满意时。然后,显示的邮件将被标记为删除。

#!/usr/bin/python3

import getpass

def del_imap(server, port, login, password, search):
    import imaplib, email

    # NOTE: According to RFC 1730 the SEARCH commands searches for 'messages that
    # CONTAIN the specified string. When multiple keys are specified, the result
    # is the intersection (AND function) of all the messages that match those
    # keys.
    # _search_command = '(FROM ' + search + ')'
    # _search_command = '(SUBJECT "testmail" FROM ' + search + ')'
    _search_command = '(SUBJECT ' + search + ')'

    imapserver = imaplib.IMAP4_SSL(server, port)
    imapserver.login(login, password)
    imapserver.select()

    typ, data = imapserver.search(None, _search_command)
    for num in data[0].split():
        typ, data = imapserver.fetch(num, '(RFC822.HEADER)')
        print (data[0][1].decode())
        # Uncomment the following line if the listed files should also be
        # flagged for deletion
        # imapserver.store(num, '+FLAGS', '\\Deleted')
    imapserver.close()
    imapserver.logout()

del_imap(input("IMAP Server: "), 993, input("Username: "), getpass.getpass(), input("Search: "))

我还创建了一个 Github-Gist,其中将进行进一步的改进:https://gist.github.com/jkirk/39dc64747a9d78accde49de2e8dbdc6d

相关内容