Отправить приглашение на собрание в почтовый ящик комнаты Exchange Online - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю над проектом 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);

1 Ответ

0 голосов
/ 27 сентября 2018

Exchange может распознавать файлы ICS. Вы можете пропустить метод iTIP, оба в типе контента:

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

Вы можете сослаться на эту ссылку:

Многочастная электронная почта стекст и календарь: Outlook не распознает ICS

...