<div class="markdown">
<p dir="auto">Hi,</p>

<p dir="auto">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. </p>

<p dir="auto">On 29 Nov 2013, at 23:51, Benny Kjær Nielsen wrote:</p>

<blockquote>
<p dir="auto">First, I assume you have a mailbox of incoming messages. We'll name it Incoming. Now, create a smart mailbox as follows:</p>

<pre><code>Mailboxes: “All Messages” ▸ “All Body Parts”

Condition: “Root Body Part” is in “Incoming” “Body Part Id”
</code></pre>

<p dir="auto">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:</p>
</blockquote>

<p dir="auto">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.</p>

<blockquote>
<pre><code>Condition: “Content-Type ▸ Type” is “image”
Action: “Run Script” “My Saver”
</code></pre>
</blockquote>

<p dir="auto">this worked after i got my bundle correct with help.</p>

<blockquote>
<p dir="auto">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:</p>
</blockquote>

<p dir="auto">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.</p>

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

<p dir="auto">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.</p>

<p dir="auto">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:</p>

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

<p dir="auto">That'll probably work well most of the time.</p>
</blockquote>

<p dir="auto">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!</p>

<p dir="auto">One last question: I am not able to perform more actions than running the saver script, like setting a tag, so</p>

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

<p dir="auto">just runs the script, but tag setting or moving does not work. Same behavior when I set the tag action alone, nothing happens?</p>

<p dir="auto">Regards</p>

<pre><code>        Thomas
</code></pre>

</div>