【发布时间】:2019-03-02 16:47:18
【问题描述】:
我正在开发一个 C# WebApi 项目,该项目需要在没有用户交互的情况下预订 Exchange Online 房间邮箱。
我注意到,当您在 Office 365 中创建新的日历事件时,它会将带有 .ICS 文件的消息发送到未知域,但对于任何 Outlook 电子邮件地址,它会发送不带附件的消息,无论如何都会被识别为事件邀请。如果您指定位置,它还会向会议室邮箱发送邀请,如果没有冲突,Exchange 会自动接受它们。我需要在 C# 中使用 SMTP 复制相同的行为。
我尝试将 ICS 文件作为附件发送到会议室邮箱,但该邮件被忽略了。 Exchange 似乎不会将这些文件识别为事件请求。如果我打开房间邮箱,没有任何接受或拒绝邀请的按钮,但我可以看到附件,并且可以选择“添加到日历”。我需要让 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);
【问题讨论】:
-
您是否将 ICS 数据包含为
text/calendar?见stackoverflow.com/a/462096/3608792 -
是的,包含在内,但标题中缺少某些内容。 Alina 在下面解决了它。
标签: c# smtp office365 exchange-server icalendar