Python O365库检测加密的电子邮件

mzsu5hc0  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(149)

bounty还有5天到期。回答此问题可获得+50声望奖励。lorem_bacon正在寻找规范答案

我正在尝试检测传入到我的O365帐户的电子邮件是否加密。
电子邮件发件人可以使用任何电子邮件提供商,如Gmail,Outlook,Yahoo等
目前,我能够从Outlook中检测到以下条件的加密邮件:len(list(filter(lambda x: x.name.lower().endswith(".rpmsg"), message.attachments))) > 0,其中消息是O365 Message object
有没有一个更通用的方法可以使用?

PS -首选Python O365或任何内置库

crcmnpdw

crcmnpdw1#

检测Office 365帐户中的加密电子邮件的一种更通用的方法是检查电子邮件中的特定MIME类型或特定标头,因为不同的电子邮件提供商或加密工具可能使用不同的方法来加密邮件。下面是一个使用O365库的Python函数,该函数基于常见的加密MIME类型和标头检查加密电子邮件:

from O365 import Account

def is_email_encrypted(message):
    encrypted_mime_types = [
        'application/pgp-encrypted',
        'application/pkcs7-mime',
        'application/x-pkcs7-mime',
        'application/vnd.ms-outlook-encrypted'
    ]

    encrypted_headers = [
        'X-MS-Exchange-Encrypted',
        'X-Gm-Message-State',
    ]

    # Check for encrypted attachments
    if len(list(filter(lambda x: x.name.lower().endswith(".rpmsg"), message.attachments))) > 0:
        return True

    # Check for encrypted MIME types
    for mime_type in encrypted_mime_types:
        if any(part.content_type.lower() == mime_type for part in message.attachments):
            return True

    # Check for encrypted headers
    for header in encrypted_headers:
        if message.get(header) is not None:
            return True

    return False

# O365 account setup
credentials = ('client_id', 'client_secret')
account = Account(credentials)
if account.authenticate(scopes=['basic', 'message_all']):
    mailbox = account.mailbox()
    inbox = mailbox.inbox_folder()

    for message in inbox.get_messages():
        if is_email_encrypted(message):
            print(f"Message with subject '{message.subject}' is encrypted")
        else:
            print(f"Message with subject '{message.subject}' is not encrypted")

此函数检查是否存在电子邮件提供程序和加密工具常用的加密MIME类型或标头。它还包括您已对Outlook加密邮件(以“.rpmsg”结尾的附件)实施的检查。
请记住,此方法可能无法涵盖所有可能的加密方法,但它应该适用于最常用的电子邮件提供程序和加密工具。如果将来遇到更多方法,您可以随时向列表中添加更多MIME类型或标头。

相关问题