Мне нужно отправить приглашения на собрания, которые иногда могут включать в себя вложения в формате 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? Заранее спасибо.