Hi,

because I exchanged some pm with Benny about this a short update about this and a last open question only side. To explain the context, the idea is to make this a part of my paperless workflow, which is heavily based on automation, so saving certain attachments is a nice addition to this.


On 29 Nov 2013, at 23:51, Benny Kjær Nielsen wrote:


First, I assume you have a mailbox of incoming messages. We'll name it Incoming. Now, create a smart mailbox as follows:

        Mailboxes: “All Messages” ▸ “All Body Parts”

Condition: “Root Body Part” is in “Incoming” “Body Part Id”

This smart mailbox is going to contain any body parts in any messages in the “Incoming” mailbox. Next you can create rules for this smart mailbox. For example:

This works like a blast, so I set up a mailbox filtering wall the mails which should be considered for automatic processing. Benny's rule splits those messages in the body parts, which is needed to identify the attachments properly.


        Condition: “Content-Type ▸ Type” is “image”
        Action: “Run Script” “My Saver”

this worked after i got my bundle correct with help.

The last piece of the puzzle is the script. You need a bundle for that and those are currently non-trivial to create. You should find an existing one and replace all the UUID values with new values. All you need is a single file in the “Commands” folder which should have content similar to this:

Make sure, that every file in the bundle (here info.plist and the Command file) have unique (=different) uuid. I misinterpreted the uuid as a "bundle" identifier, but every file needs a different one, these is sort of index of all the various parts in the system.

        {
                name    = 'My Saver';
                input   = 'decoded';
                script  = '#!/bin/bash\ncat > /tmp/image.png\n';
                uuid = '88A186D7-1452-4857-941D-DA96E612F835';
        }

This command tells MailMate to provide a decoded body part (binary image data in this case) to the script. The script simply pipes the input to a temporary file.

This should be improved to use a non-hardcoded filename. It could be based on message headers, but this can be non-trivial and I think it would be better if MailMate provided a useful filename (based on the headers). I'll put that on the ToDo. Even better, MailMate should (also) provide a simple “Save” action with a folder location argument to avoid creating a command (and bundle) at all. This could also ensure a unique filename. Until that is available then you could do the following in the command given above:

environment = 'MY_FILENAME=${content-disposition.parameter.split.filename:${content-type.parameter.split.name}}\n';
        script  = '#!/bin/bash\ncat > "/tmp/${MY_FILENAME}"\n';

That'll probably work well most of the time.

it does. I am able to save .pdf from various (but controlled) sources automatically to my paperless work folder, where the same automation by Hazel applies, that is working for scanned documents etc. Exiting!

One last question: I am not able to perform more actions than running the saver script, like setting a tag, so


        Condition: “Content-Type ▸ Type” is “image”
        Action: “Run Script” “My Saver”
             “set tag” “saved”
             “move to mailbox” “Archive”

just runs the script, but tag setting or moving does not work. Same behavior when I set the tag action alone, nothing happens?

Regards

            Thomas


_______________________________________________
mailmate mailing list
[email protected]
http://lists.freron.com/listinfo/mailmate

Reply via email to