AppleScript - извлечь сообщение электронной почты как объект MIME - PullRequest
0 голосов
/ 17 мая 2018

У меня есть AppleScript, который я написал, чтобы выполнить некоторый анализ сообщений Mail.app, однако, похоже, мне потребуется более мощная обработка (в частности - отделить ответное сообщение от исходного сообщения, которое он цитирует), чем то, что предоставляется AppleScript (скажем,, используя пакет Python email).Можно ли получить сообщение электронной почты в виде строки MIME?

1 Ответ

0 голосов
/ 18 мая 2018

Я не уверен, что это то, что вы имели в виду, но вот как вы можете получить необработанный текст сообщения из выбора, сделанного вами в Mail.app, который затем можно обработать с помощью инструментов MIME для извлечения всех частей. .

tell application "Mail"
    set msgs to selection
    if length of msgs is not 0 then
        repeat with msg in msgs

            set messageSource to source of msg

            set textFile to "/Users/harley/Desktop/foo.txt"

            set myFile to open for access textFile with write permission
            write messageSource to myFile
            close access myFile

        end repeat
    end if
end tell

И вот пример сценария электронной почты Python, который распаковывает сообщение и записывает каждую часть MIME в отдельный файл в каталоге

https://docs.python.org/3.4/library/email-examples.html

#!/usr/bin/env python3

"""Unpack a MIME message into a directory of files."""

import os
import sys
import email
import errno
import mimetypes

from argparse import ArgumentParser


def main():
    parser = ArgumentParser(description="""\
Unpack a MIME message into a directory of files.
""")
    parser.add_argument('-d', '--directory', required=True,
                        help="""Unpack the MIME message into the named
                        directory, which will be created if it doesn't already
                        exist.""")
    parser.add_argument('msgfile')
    args = parser.parse_args()

    with open(args.msgfile) as fp:
        msg = email.message_from_file(fp)

    try:
        os.mkdir(args.directory)
    except FileExistsError:
        pass

    counter = 1
    for part in msg.walk():
        # multipart/* are just containers
        if part.get_content_maintype() == 'multipart':
            continue
        # Applications should really sanitize the given filename so that an
        # email message can't be used to overwrite important files
        filename = part.get_filename()
        if not filename:
            ext = mimetypes.guess_extension(part.get_content_type())
            if not ext:
                # Use a generic bag-of-bits extension
                ext = '.bin'
            filename = 'part-%03d%s' % (counter, ext)
        counter += 1
        with open(os.path.join(args.directory, filename), 'wb') as fp:
            fp.write(part.get_payload(decode=True))


if __name__ == '__main__':
    main()

Итак, если сценарий unpack.py запущен на выходе AppleScript ...

python unpack.py -d OUTPUT ./foo.txt 

Вы получаете каталог с разделенными MIME-частями. Когда я запускаю это в сообщении, которое цитирует оригинальное сообщение, тогда оригинальное сообщение появляется в отдельной части.

...