发送带有附加(非.ics)附件的iCalendar会议邀请的Outlook问题

时间:2015-07-16 19:17:02

标签: c# email outlook icalendar mailmessage

我需要发送有时可能包含.pdf附件的会议邀请。 所以我正在使用Alternative视图(对于iCalendar内容)构建System.Net.Mail.MailMessage,使用Body和附件(如果存在)。我需要最受欢迎的邮件客户端(支持日历)才能处理我的邀请电子邮件。

这是我的代码,非常适用于:

带/不带pdf附件的gmail(网络/移动应用程序)
带/不带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部件可能出现什么问题的任何建议? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

有很多类似的问题。您需要确保邮件的MIME结构正确。

参见例如Outlook 2013 invite not showing embeded attachment - text/calendar;method=REQUEST