4

我们有一个 .NET 应用程序,可以手动生成会议邀请以发送给用户。我们使用的流程如下:

  • 创建一个 System.Net.Mail.MailMessage 并设置常用字段(发件人/收件人/主题/等)并将会议信息作为附件(ICS 文件),7 位编码 - 这对于无法识别 Outlook 的邮件客户端是必需的风格的邀请
  • 添加两个备用视图,text/plain 和 text/html,均为 7 位编码的电子邮件文本
  • 添加另一个带有“text/calendar;charset=UTF-8;method=REQUEST”的替代视图,其 ICS 文本与上面附加的 ICS 文件相同,也是 7 位编码
  • 发信息

这适用于传统的 Outlook 2007 / Exchange 设置(附件不可见,消息被视为会议请求),但一旦我们升级到 Outlook 2010/Office 365,嵌入式 ICS 数据将无法识别,并且消息显示作为附有 ICS 文件的常规消息。删除附件会生成正确识别的邮件。我们不确定是新的 Outlook 版本还是 Office 365 导致了这种变化,但它必须是其中之一。

有谁知道为什么会发生这种变化以及我们如何解决它?

4

3 回答 3

2

我们遇到了类似的问题。在我们的案例中,我们的邮件服务器从exchange 2003升级到exchange 2010,我们公司将一些人的电子邮件帐户迁移到2010。我们仍然使用outlook 2007作为前端。我们有一个 .NET 应用程序,可以将会议邀请创建为替代视图并将其发送给收件人。那些电子邮件帐户被迁移的人不再收到作为会议请求的邀请,而只是收到普通电子邮件。2003 年留下来的人,作为会议请求得到邀请是没有问题的。我在网上搜索,发现 Exchange 2010 改变了它处理 .ics 文件的方式,并且比以前的版本更严格。最糟糕的部分是它不遵循 RFC 标准,微软认为试图找出阻止他们的 Exchange 2010 正确解释 .ics 的部分不是他们关心的问题。所以我的解决方法不是发送 .ics 作为替代视图,而是将其作为附件发送。当在迁移到 2010 的电子邮件帐户中收到该附件时,用户可以看到该附件,并且用户可以单击该附件将其导入到他们的日历中。

于 2013-03-21T22:27:20.887 回答
0

Outlook/Exchange 期望邮件类型为文本/日历,而不是文本/多部分。

于 2013-03-21T22:38:22.030 回答
0

我最近在使用 System.Net.Mail 时遇到了这个问题:

  1. 使用 iCalendar 作为不带附件的替代视图(文本/日历)发送电子邮件:它可以工作。- 我使用 iCal.Net 生成 iCalendar 消息。
  2. 使用 iCalendar 作为带有附件的替代视图(文本/日历)发送电子邮件:它适用于 Windows 10 邮件,但不适用于 Outlook365。

此问题的根本原因是:当您的电子邮件包含附件时,MailMessage 将生成如下消息:

multipart/mixed
  multipart/alternative
    text/plain
    text/calendar;method=REQUEST
  multipart/mixed
    content-type (with a content-disposition:attachment)

但 Outlook365 期望该消息是:

multipart/mixed
  multipart/alternative
    text/plain
    text/calendar;method=REQUEST
  content-type (with a content-disposition:attachment)

当 Outlook 收到错误的附件格式时。某种方式,它会忽略日历部分。

我的解决方案:我决定使用 MailKit 而不是 System.Net.Mail 来发送电子邮件。通过使用这个库,我可以控制消息格式。

于 2018-08-23T08:59:09.913 回答