this is incredible complicated thing. I had the same problem with appointments some time ago. Spent about 12 hours on it. What you should try to do first: add "Meeting.ics" in the attachment. Try different content types: multipart/alternative, with AlternateViews.
http://stackoverflow.com/questions/461889/sending-outlook-meeting-requests-without-outlook[
^]
string bodyText = "Please come to project XYZ review meeting.";
string bodyHtml = "<p>Please come to project XYZ review meeting.</p>";
string appointmentData =
"BEGIN:VCALENDAR\n" +
"PRODID:Rebex Mail\n" +
"VERSION:2.0\n" +
"BEGIN:VTIMEZONE\n" +
"TZID:US-Eastern\n" +
"BEGIN:STANDARD\n" +
"DTSTART:19981025T020000\n" +
"RDATE:19981025T020000\n" +
"TZOFFSETFROM:-0400\n" +
"TZOFFSETTO:-0500\n" +
"TZNAME:EST\n" +
"END:STANDARD\n" +
"BEGIN:DAYLIGHT\n" +
"DTSTART:19990404T020000\n" +
"RDATE:19990404T020000\n" +
"TZOFFSETFROM:-0500\n" +
"TZOFFSETTO:-0400\n" +
"TZNAME:EDT\n" +
"END:DAYLIGHT\n" +
"END:VTIMEZONE\n" +
"BEGIN:VEVENT\n" +
"DTSTAMP:19980309T231000Z\n" +
"UID:guid-1.host1.com\n" +
"ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n" +
"ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n" +
"DESCRIPTION:Project XYZ Review Meeting\n" +
"CATEGORIES:MEETING\n" +
"CLASS:PUBLIC\n" +
"CREATED:19980309T130000Z\n" +
"SUMMARY:XYZ Project Review\n" +
"DTSTART;TZID=US-Eastern:19980312T083000\n" +
"DTEND;TZID=US-Eastern:19980312T093000\n" +
"LOCATION:1CP Conference Room 4350\n" +
"END:VEVENT\n" +
"END:VCALENDAR\n";
AlternateView appointment = new AlternateView();
appointment.SetContent(appointmentData, "text/calendar");
appointment.ContentType.Parameters.Add("method", "REQUEST");
MailMessage message = new MailMessage();
message.BodyText = bodyText;
message.BodyHtml = bodyHtml;
message.AlternateViews.Add(appointment);
message.Save(...);