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

Send meeting request to Exchange Online room mailbox

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

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

我尝试将 ICS 文件作为附件发送到房间邮箱,但邮件被忽略了。 Exchange 似乎无法将这些文件识别为事件请求。如果我打开房间邮箱,没有任何接受或拒绝邀请的按钮,但我可以看到附件,并且可以select "Add to calendar"。我需要让 Exchange 自动接受请求。

经过一些研究,我发现了几种用 C# 安排会议的方法。一种是使用 Exchange Web Services Managed 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);

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

Content – Type: text/plain; charset=”utf-8”; method=REQUEST
name=myCalendar.ics 
Content-Disposition: attachment; 
filename=myCalendar.ics

你可以参考这个link:

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