On 18 Oct 2017, at 19:03, Benny Kjær Nielsen wrote:

On 17 Oct 2017, at 23:18, Giovanni Lanzani wrote:

  - the attachment (i.e. the invite);

This is where you need me to add something to MailMate. I've kind of postponed providing attachments to bundle commands until it was needed, but this is a “chicken or the egg” type of excuse :)

I'm thinking this would be some kind of boolean option for bundle commands which would provide paths to all attachments saved as files (maybe optionally filtered by mime type). I'll need a bit of time to think about this.

[...]

But MailMate is also lacking the ability to let you add an attachment to a reply. This I would also need to add (and I would want to do this not only for the purpose of this bundle).

[...]

Maybe I should just let you know when the attachments features described above are available? :)

Ok, I've got something for you now in the latest test release of MailMate.

First, a `*.mmCommand` file now recognizes a new key named `filesPattern`. This is a regular expression which can be used to tell MailMate which parts of an email to match. When iterating through the so-called MIME parts of a message then it keeps track of the hierarchy of MIME types. For example, a plaint text part might be:

        multipart/mixed multipart/alternative text/plain

A pattern matching this would just be:

        text/plain

If one wanted to only make it match when the message is nothing but a plain text part then it would be:

        ^text/plain

In your case you just need to add this to the `mmCommand`:

        filesPattern = "text/calendar";

This results in any `text/calendar` parts to be saved in temporary files and the paths are provided using `MM_FILES` in the environment variables. They are passed with some additional information in a JSON array. Here's an example how one could work with that in ruby:

~~~ruby
#!/usr/bin/ruby -w

require 'json'

input=ENV["MM_FILES"]
files = JSON.parse(input)

attachments = []
files.each { |file|
  attachments.push(file["filePath"]);
}
~~~

You can then parse the calendar file and do whatever is needed. If a reply needs to be generated then you can return a set of actions. This can also be done using JSON (which is a new feature). Here's an example:

~~~ruby
action = {
  :type => "replyMessage",
  :body => "This is a reply including an attachment...",
:temporaryAttachments => [ "/path/to/another/text/calendar/file.ics" ],
  :resultActions => [ { :type => "openMessage" } ],
}

actions = { :actions => [ action ] }

puts actions.to_json
~~~

Note that `temporaryAttachments` means that MailMate takes responsibility for deleting the files when it's done with them. Using `attachments` instead means that MailMate won't delete them.

A remaining problem here might be that it's not sufficient to attach the calendar file since that'll result in an email with the following structure:

        multipart/mixed
                text/plain
                text/calendar

It might not work in other email clients if the structure is not:

        multipart/alternative
                text/plain
                text/calendar

This is all work-in-progress.

By the way, when working with iCalendar files then note that there's a validator available [here](https://icalendar.org/validator.html).

--
Benny
_______________________________________________
mailmate mailing list
mailmate@lists.freron.com
https://lists.freron.com/listinfo/mailmate

Reply via email to