将会议请求发送到Exchange Online会议室邮箱

时间:2018-09-26 20:32:34

标签: c# smtp office365 exchange-server icalendar

我正在研究一个C#WebApi项目,该项目要求在没有用户交互的情况下预订Exchange Online会议室邮箱。

我注意到,当您在Office 365中创建新的日历事件时,它将带有.ICS文件的消息发送到未知域,但是对于任何Outlook电子邮件地址,它都会发送不带附件的消息,无论如何它都被认为是事件邀请。如果您指定了位置,它还会向房间邮箱发送邀请,如果没有冲突,Exchange会自动接受邀请。我需要在C#中使用SMTP复制相同的行为。

我尝试将ICS文件作为附件发送到会议室邮箱,但是该消息只是被忽略了。 Exchange似乎无法将这些文件识别为事件请求。如果打开会议室邮箱,没有任何按钮可以接受或拒绝邀请,但是我可以看到附件,并且可以选择“添加到日历”。我需要让Exchange自动接受请求。

经过一些研究,我发现了一些使用C#安排会议的方法。一个正在使用Exchange Web服务托管API,但是我听说它将在几年后被弃用,所以我不能使用它。还有其他选项,例如使用Graph,但它们具有复杂的身份验证系统,需要用户交互才能设置凭据。如果可能的话,我需要使用SMTP或其他使用简单用户名和密码身份验证的方法来进行此操作。

有人知道为什么Exchange无法识别ICS文件吗,以及是否还有其他方法可以通过SMTP做到这一点?

编辑:已解决。如果有人感兴趣,这是C#中的完成代码:

var calendarBytes = Encoding.UTF8.GetBytes(sb.ToString());
MemoryStream ms = new MemoryStream(calendarBytes);
var ct = new ContentType() { MediaType = "text/calendar", CharSet = "utf-8" , Name = "Part_3.ics" };
ct.Parameters.Add("method", "REQUEST");
Attachment attachment = new Attachment(ms, ct);
attachment.ContentDisposition.DispositionType = DispositionTypeNames.Attachment;
attachment.ContentDisposition.FileName = "Part_3.ics";
message.Attachments.Add(attachment);

1 个答案:

答案 0 :(得分:0)

Exchange可以识别ICS文件,但在内容类型中都可能缺少iTIP方法:

s->s+="CHANGE"

您可以引用此链接:

Multipart email with text and calendar: Outlook doesn't recognize ICS