Два вопроса о ical.net
Мне нужно отправить напоминание пользователям веб-приложения.
Для этого я использую iCal.Net из пакетов nuget. Следуя инструкциям по использованию, я могу отправить электронное письмо с приложением, содержащим файл ics.
Мой первый вопрос: возможно ли отправить сообщение как встречу, а не как вложение, чтобы пользователь мог не открывать его, а затем сохранять дату?
Второе: возможно ли отформатировать описание события в формате html и заставить его работать как в клиенте Outlook для офиса, так и в календаре Chrome? На этих клиентах я вижу текстовое представление со всеми тегами HTML. Я также проверил на календаре Windows 10, где описание события правильно отображается в виде HTML. Должен ли я установить что-то еще?
Это моя генерация календарной строки
var now = DateTime.Now;
var later = scadenza.Value;
var e = new Event
{
DtStart = new CalDateTime(later),
DtEnd = new CalDateTime(later),
Description = mailText,
IsAllDay = true,
Created = new CalDateTime(DateTime.Now),
Summary = $"Reminder for XYZ",
};
var attendee = new Attendee
{
CommonName = "…..",
Rsvp = true,
Value = new Uri("mailto:" + ConfigurationManager.AppSettings["ReminderReceiver"])
};
e.Attendees = new List<IAttendee> { attendee };
var calendar = new Calendar();
calendar.Events.Add(e);
var serializer = new CalendarSerializer(new SerializationContext());
var icalString = serializer.SerializeToString(calendar);
И это для отправки напоминания; обратите внимание, что если я не "прикрепляю" ics, альтернативное представление кажется неэффективным.
var message = new MailMessage();
message.To.Add(new MailAddress(receiverRecipient));
message.From = new MailAddress(senderRecipient);
message.Subject = messageTitle;
message.Body = "The attachment contains the reminder";
message.IsBodyHtml = true;
var smtpClient = new SmtpClient(ConfigurationManager.AppSettings["SmtpSrv"], Convert.ToInt32(ConfigurationManager.AppSettings["SmtpPort"]));
var cred = new NetworkCredential(ConfigurationManager.AppSettings["SmtpUser"], ConfigurationManager.AppSettings["SmtpPwd"]);
smtpClient.Credentials = cred;
System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar");
contype.Parameters.Add("method", "REQUEST");
contype.Parameters.Add("name", "Scadenza.ics");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(icalString, contype);
message.AlternateViews.Add(avCal);
message.Attachments.Add(new Attachment(GenerateStreamFromString(icalString), contype));
smtpClient.Send(message);