添加标签/类别以通过python

时间:2016-12-09 19:02:09

标签: python email exchange-server

我正在使用python 3,我想为某些电子邮件添加类别。

我发现这些类别显示在电子邮件的“关键字”部分下方。通过这种方式,我可以识别哪些电子邮件已经设置了类别。

import imaplib
import email

M = imaplib.IMAP4_SSL(host)
M.login(username, password)
M.select(folder)

# I'd love to be able to only search for emails without keywords here,
# but M.search(None, '(Keywords)') doesn't work
status, data = M.search(None, 'ALL')

for num in data[0].split():
    status, msg_data = M.fetch(num, '(RFC822)')
    msg = email.message_from_bytes(data[0][1], email.message.EmailMessage)

    # skip things which have categories already
    if msg.get('Keywords') is not None:
        continue

    # I want to categorise the message here, e.g. add a category 'approve'

电子邮件服务器是交换(我不确定他们使用的是什么版本)。

我知道我们可以像这样在消息上添加标记

M.store(num, '+FLAGS', '//flagged')

但将'//flagged'更改为'\\approved'之类的自定义内容会产生imaplib.error: STORE command error: BAD [b'Command Argument Error. 11']

另外,我不确定关键字是否是旗帜?

编辑:我正在阅读this(似乎是supported by Exchange 2010, but I don't know if that's what's being used,似乎关键字是标记,但不是以\开头。即便如此,使用(approved)approved不起作用。

编辑:我尝试通过openssl连接到服务器。它显示

* FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
* OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags

,因为\ *不是一个选项,意味着不接受自定义标志,因此通过+ FLAGS设置无效的原因。

修改:我现在正在使用一种解决方法,即添加一个包含已修改关键字的新电子邮件,然后删除旧的电子邮件。我觉得它很难看,但它确实有效......

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用exchangelib

from exchangelib import Account, Credentials, DELEGATE

account = Account(
    'me@example.com', 
    credentials=Credentials('myuser', 'topsecret'), 
    autodiscover=True, 
    access_type=DELEGATE
)
for email in account.inbox.all():
    email.categories = ['foo', 'bar']
    email.save()