Marc Clifton Ответов: 1

Как отправить электронное письмо с календарным событием в теле письма?


У меня не было никаких проблем с отправкой электронного письма (из gmail, в учетную запись gmail), к которому прикреплено событие календаря ICS.

Но я хочу отправить его так, чтобы пользователь увидел это событие в теле письма и может нажать кнопку Да/Нет, которая, когда я получаю такие письма, автоматически добавляет событие в мой календарь google.

За всю свою жизнь я так и не смог получить микросхемы, встроенные в тело письма!

Что я уже пробовал:

Много примеров, вот один из них Блог Брэдвина .Net - создание vCalendars программно на языке C#[^] который не помещает событие календаря в тело письма. Он делает то же, что и все остальные.

Последующие действия: если я отправляю электронное письмо в учетную запись Outlook, оно отображается встроенным, просто установив расположение содержимого прикрепленного файла ICS на встроенный --- сниппет:

var att = new Attachment("meeting.ics", contype);
att.ContentDisposition.Inline = true;
msg.Attachments.Add(att);


Но эта дискуссия[^] говорит о необходимости реализации многопартийной/смешанной структуры для gmail и yahoo!

Может ли кто-нибудь это подтвердить?

ZurdoDev

Это потому, что вы не можете заставить почтовый клиент отображать вложения. Не создание микросхем. Вместо этого создайте HTML.

1 Ответов

Рейтинг:
2

RickZeeland

Может быть, вам стоит использовать:

msg.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
Объяснение см. здесь: c# - отправка электронной почты в Outlook с назначением встречи ics - переполнение стека[^]

На GitHub также есть интересная библиотека календарей: GitHub - rianjs/ical.net: ical.NET - библиотека iCal с открытым исходным кодом для .NET[^]


Marc Clifton

Да, я добавляю урну. Не влияет.

RickZeeland

Что ж, попробовать стоило :)

Richard Deeming

Вы добавили ICS в качестве альтернативного представления, а не вложения, как показано в этом вопросе so?

var contype = new System.Net.Mime.ContentType("text/calendar");
contype.Parameters.Add("method", "REQUEST"); 
contype.Parameters.Add("name", "Meeting.ics");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), contype);
msg.AlternateViews.Add(avCal);