Я работаю над проектом C# WebApi, который требует резервирования почтовых ящиков комнаты Exchange Online без взаимодействия с пользователем.
Я заметил, что когда вы создаете новое событие календаря в Office 365, он отправляет сообщения с файлами .ICS в неизвестные домены, но для любого адреса электронной почты Outlook он отправляет сообщение без вложения, которое в любом случае распознается как приглашение на мероприятие. Он также отправляет приглашения в почтовые ящики комнат, если вы указываете расположение, и Exchange автоматически принимает их, если нет конфликтов. Мне нужно воспроизвести то же поведение с помощью SMTP в C#.
Я попытался отправить файл ICS как вложение в почтовый ящик комнаты, но сообщение просто игнорируется. Похоже, что Exchange не распознает эти файлы как запросы событий. Если я открою почтовый ящик комнаты, не будет никаких кнопок для принятия или отклонения приглашения, но я вижу вложение и могу выбрать «Добавить в календарь». Мне нужно, чтобы Exchange автоматически принимал запрос.
Проведя небольшое исследование, я нашел несколько способов планировать встречи на C#. Один из них использует управляемый API веб-служб Exchange, но я слышал, что через пару лет он устареет, поэтому я не могу его использовать. Есть и другие варианты, такие как использование 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
Вы можете сослаться на эту ссылку:
Составное электронное письмо с текстом и календарем: Outlook не распознает ICS
Вот и все! В шапке чего-то не хватало. Спасибо! Я обновил вопрос готовым фрагментом кода.
Вы включали данные ICS как
text/calendar? См. stackoverflow.com/a/462096/3608792