Проблема Outlook с отправкой приглашения на собрание iCalendar с дополнительным вложением (не .ics)

Мне нужно отправить приглашения на собрания, которые иногда могут включать в себя вложения в формате PDF. Итак, я создаю System.Net.Mail.MailMessage с альтернативным представлением (для содержимого iCalendar), с телом и с вложением, если оно существует. Мне нужно, чтобы самые популярные почтовые клиенты (поддерживающие календари) могли обрабатывать мои приглашения по электронной почте.

Вот мой код, который неплохо работает:

gmail (веб / мобильное приложение) с / без вложения pdf
yahoo mail (веб / мобильное приложение) с / без вложения pdf
Outlook (рабочий стол) только без вложения pdf

    public virtual MailMessage CreateMailMessage(string content, Meeting meeting)
    {
        MailMessage mailMessage = new MailMessage();
        mailMessage.From = _mailsAddressesProvider.GetFromEmaiMailAddress(meeting);
        mailMessage.To.AddRange(_mailsAddressesProvider.GetToEmaiMailAddresses(meeting));
        mailMessage.CC.AddRange(_mailsAddressesProvider.GetCCEmailAddresses(meeting));
        mailMessage.Bcc.AddRange(_mailsAddressesProvider.GetBCCEmailAddresses(meeting));

        mailMessage.Subject = GetMessageSubject(meeting);
        mailMessage.Body = GetMessageBody(meeting);
        mailMessage.IsBodyHtml = IsBodyHtml();

        ContentType contentType = new ContentType("text/calendar");
        contentType.Parameters.Add("method", Method);
        contentType.Parameters.Add("name", AttachmentName);
        AlternateView avCal = AlternateView.CreateAlternateViewFromString(content, contentType);
        mailMessage.AlternateViews.Add(avCal);

        AddAttachments(mailMessage, meeting);

        return mailMessage;
    }

    public virtual bool AddAttachments(MailMessage mailMessage, Meeting meeting)
    {
        byte[] meetingMaterialsBytes = _meetingMaterialsRepository.GetMeetingMaterails(meeting);
        if (meetingMaterialsBytes == null || meetingMaterialsBytes.Length == 0)
        {
            return false;
        }
        ContentType contentType = new ContentType(MediaTypeNames.Application.Pdf);
        Attachment attach = new Attachment(new MemoryStream(meetingMaterialsBytes), contentType);
        attach.ContentDisposition.FileName = "MeetingMaterials.pdf";
        attach.ContentDisposition.Inline = true;
        attach.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
        attach.ContentId = "MeetingMaterials";

        mailMessage.Attachments.Add(attach);
        return true;
    }

Таким образом, проблема в том, что в Outlook открывается электронное письмо с вложением.

Вот как такое письмо открывается в Outlook без вложения pdf - ОК:

Вот как такое электронное письмо открывается в Outlook с вложением pdf - ОК: вероятно, нет проблем с содержимым iCalendar (ics), но с объектом System.Net.Mail.MailMessage.

Итак, проблема в том, что мне нужно, чтобы Outlook открывал электронное письмо с вложением как приглашение на собрание, а не как обычное электронное письмо.

Есть предложения о том, что может быть не так с моими частями MailMessage? Заранее спасибо.


person Bogdan Dudnik    schedule 16.07.2015    source источник


Ответы (1)


Подобных вопросов было довольно много. Вам необходимо убедиться в правильности структуры MIME вашего сообщения.

См., Например, приглашение Outlook 2013, не отображающее встроенное вложение - текст / calendar; method = ЗАПРОС

person Dmitry Streblechenko    schedule 16.07.2015