[Evolution] Outlook <-> Evolution meeting request problem. Solution!



To whom it may concern:

At our company we use both Outlook 2000 (OL) and Evolution (Evo) for our
email and calendaring needs. We have had quite a number of problems with
exchanging meeting requests and sharing freebusy information.
Most of these problems seem to be solved (for) now and I'd like you to
see the solution for the meeting requests problem. Maybe it will help
solve yours.
If you are interested in the freebusy solution, tell me and I will post
that one too!

Meeting Requests
----------------

We had 2 problems:

1. OL sent winmail.dat attachments
2. OL couldn't read Evo meeting requests (empty message, showing only
the text 'Event information'
3. Evo doesn't tell what someone responded to a meeting request
(accepted, denied, etc)

The first was solved by telling OL to only send calendaring information
using iCal. (Menu: Tools/Settings/Calendar Options/..)
This resulted in another problem:
4. Some OL clients could not see meeting requests from other OL clients!
The got completely empty messages. What was going on???

Well, to be short, we used procmail to filter these messages and changed
some headers.
One issue was the multipart/alternative MIME Type Evo uses. That was
fixed by changing it into multipart/mixed.
The other was to change the MIME Type of OLs messages from text/calendar
into multipart/mixed.
The third thing we did, whas to extract the PARTSTAT info (which tells
us how somebody replied to a meeting request in Evo) and added a new
DESCRIPTION with that info.

Below you can see our solution. Please be careful when trying it
yourself. Mail could get lost if you don't know what you are doing.

Please tell me what you think of it!

Regards,

Roald

procmailrc
----------
# From Evolution
:0 
* ^X-Mailer:.*Evolution
{
  :0 Bfw
  * ^Content-Type: *text/calendar
  | /usr/local/bin/meeting_request_evo.pl
}

# From Outlook
:0 
* ^X-Mailer:.*Outlook
{
  :0 Bfw 
  * ^Content-Type: *text/calendar
  | /usr/local/bin/meeting_request_ol.pl
}

meeting_request_evo.pl
----------------------
open(STDIN, "-");

$disposition = "Content-Disposition: inline; filename=calendar.ics";

while (<STDIN>)
{
        s/(multipart\/alternative)/multipart\/mixed/;
        s/(Content-Type: text\/calendar.*)$/$disposition\n$1/;
        s/(PARTSTAT=3D)(.*)(:MAILTO.*)$/$1$2$3\nDESCRIPTION: $2/;
        $mail .= $_;
}
close(STDIN);

open(STDOUT, ">-");
print STDOUT $mail;
close(STDOUT);

meeting_request_ol.pl
---------------------
open(STDIN, "-");

$boundary = "=-BOUNDARY".int(rand(1000000000000000));
$mulipartcontenttype = "Content-Type: multipart\/mixed;
boundary=\"$boundary\"";
while (<STDIN>)
{
        s/(Content-Type: text\/calendar.*)$/$mulipartcontenttype/;
        $calendarcontenttype = $1 if $1;

        $mail .= $_;
}
close(STDIN);

$prepart = qq|
--$boundary
Content-Description: Event information
Content-Type: application/octet-stream; name="Meeting_Request.ics"
Content-Disposition: inline; filename="Meeting_Request.ics"
Content-Transfer-Encoding: 8bit
|;

$postpart = "^ \n$boundary--";

$mail =~ s/(BEGIN:VCALENDAR)/$prepart\n$1/m;

open(STDOUT, ">-");
print STDOUT $mail;
close(STDOUT);
---------------------------------

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]