* On 14 Sep 2016, Cameron Simpson wrote: > > Mutt is probably a poor match for the task because although it will decode > messages etc, all the saving is interactive. In particular, there's no API > for "iterating" over attachments, let along recursively.
Agree. It's entirely doable, but not worth the trouble and the maintenance when there are other fine options. > I'd be going for the Python stuff, lacking your context. See attached. You can pipe a message into this program (within mutt or elsewhere): | mutt-savefiles /tmp/foo It will create a directory under /tmp/foo named for the message's message-id, and store each attachment inside. Filenames are taken from the MIME or generated sequentially if there is no filename. -- David Champion • d...@bikeshed.us
#!/usr/bin/env python # # TODO: merge into sympafile # import os import sys import email import mimetypes m = email.message_from_file(sys.stdin) # mimetypes very unfortunately maps text/plain to .ksh, so # we'll favor this internal list in type lookups. localtypes = { 'text/plain': '.txt', } if 'message-id' in m: msgid = m['message-id'].strip('<>') else: msgid = str(time.time()).replace('.', '_') if len(sys.argv) > 1: dirname = sys.argv[1] else: dirname = '.' dirname = os.path.join(dirname, msgid) try: os.makedirs(dirname) except: pass n = 0 for p in m.walk(): n += 1 mtype = p.get_content_type() if mtype.startswith('multipart/'): # container continue ext = localtypes.get(mtype.lower()) or \ mimetypes.guess_extension(mtype) or \ '.bin' filename = p.get_filename() or ('%02d%s' % (n, ext)) filename = os.path.join(dirname, filename) data = p.get_payload() print filename, len(data) fp = open(filename, 'w') fp.write(data) fp.close()
signature.asc
Description: PGP signature