* On 28 Jul 2013, fe...@crowfix.com wrote:
> > Today as I was saving about 20 photos I received from my sister,
> > I thought I wonder if there is a way to save all of the images
> > attached to an email in one swoop as opposed to hitting s for each
> > one.  How do you guys manage attachments?
>
> I wrote this small script; invoke it by "|muttrip dir".  It depends
> on having ripmime installed.  The followup .pl program merely builds
> a crude index.html file and reports how many files it found; you can
> skip it.

Adding to this theme: I receive voice mail as wav attachments, but I
don't "view" them through mutt.  I have a procmail rule that sends
voicemail messages to a python script (attached).  This script saves all
audio/* attachments to a designated location with a unique filename.  It
could easily be adapted as an ad hoc bulk attachment filer.

-- 
David Champion • d...@bikeshed.us
#!/usr/bin/env python

import os
import sys
import email
import email.parser
import errno

def extract(m):
        n = 0
        audio = []
        for part in m.walk():
                n += 1
                if part.get_content_type().startswith('audio/'):
                        data = part.get_payload(decode=True)
                        params = dict(part.get_params())
                        if 'name' in params:
                                name = params['name']
                        else:
                                name = 'attachment%03d.wav' % n
                        fp = open(name, 'w')
                        fp.write(data)
                        fp.close()
                        audio.append(name)

        return audio
        

def main(args):
        os.chdir(os.path.dirname(sys.argv[0]))

        p = email.parser.Parser()
        m = p.parse(sys.stdin)
        audio = extract(m)
        for file in audio:
                base, ext = os.path.splitext(file)
                if '_' in base:
                        caller, date, timeofday = base.split('_')
                        dir = date[:6]
                else:
                        dir = time.strftime('%Y%m')

                try:
                        os.makedirs(dir)
                except OSError, e:
                        if e.errno == errno.EEXIST:
                                pass
                os.rename(file, os.path.join(dir, file))

        if len(audio):
                return 0

        return 1


if __name__ == '__main__':
        sys.exit(main(sys.argv[1:]))

Reply via email to