Как отправить iCalendar так же, как Outlook делает в .NET - PullRequest
0 голосов
/ 11 января 2019

В настоящее время я могу отправить электронное письмо с MailKit с файлом ics в виде вложения, созданного с помощью iCal.net. Это работает, но я вижу это только как приложение. Когда я создаю встречу вручную в Outlook, я получаю красивый интерфейс.

Outlook Example

Когда я создаю это программно, я получаю это.

enter image description here

Я хочу создать модный интерфейс программно. Кажется, это не имеет ничего общего с ICS, потому что я вручную создал файл ICS через Outlook. И использовал этот файл ics для отправки через мое приложение и до сих пор безуспешно.

static void Main(string[] args)
    {
        string serializedCalendar = CreateRecurringEvent();
        File.WriteAllText(@"F:\test.ics", serializedCalendar);
        SendMail();
    }

    private static void SendMail()
    {
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress("Joey Tribbiani", "joey@tribbiani.com"));
        message.To.Add(new MailboxAddress("Monica Geller", "monica@geller.com"));
        message.To.Add(new MailboxAddress("Chandler Muriel Bing", "chandler@murielbing.com"));
        message.Subject = "How you doin?";

        var builder = new BodyBuilder
        {
            TextBody = @"<bodytext>"
        };

        builder.Attachments.Add(@"F:\test.ics");
        message.Body = builder.ToMessageBody();

        using (var client = new SmtpClient())
        {
            client.ServerCertificateValidationCallback = (s, c, h, e) => true;
            client.Connect("<host>", 235236);
            client.Authenticate("<username>", "<password>");
            client.Send(message);
            client.Disconnect(true);
        }
    }

    private static string CreateRecurringEvent()
    {
        DateTime now = DateTime.Now;
        DateTime later = now.AddHours(1);
        var rrule = new RecurrencePattern(FrequencyType.Daily, 1) { Count = 5 };

        var e = new CalendarEvent
        {
            Start = new CalDateTime(now),
            End = new CalDateTime(later),
            RecurrenceRules = new List<RecurrencePattern> { rrule }
        };

        var calendar = new Calendar();
        calendar.Events.Add(e);

        var serializer = new CalendarSerializer();
        return serializer.SerializeToString(calendar);
    }
}

1 Ответ

0 голосов
/ 11 января 2019

Вот как вы можете создать приглашение на собрание, которое будет работать с Outlook:

var message = new MimeMessage();
message.From.Add(new MailboxAddress("Joey Tribbiani", "joey@tribbiani.com"));
message.To.Add(new MailboxAddress("Monica Geller", "monica@geller.com"));
message.To.Add(new MailboxAddress("Chandler Muriel Bing", "chandler@murielbing.com"));
message.Subject = "How you doin?";

var mixed = new Multipart ("mixed");
mixed.Add (new TextPart ("plain") {
    ContentTransferEncoding = ContentEncoding.QuotedPrintable,
    Text = "Would you like to join this meeting?"
});

var ical = new TextPart ("calendar") {
    ContentTransferEncoding = ContentEncoding.Base64,
    Text = CreateRecurringEvent (),
};

ical.ContentType.Parameters.Add ("method", "REQUEST");

mixed.Add (ical);

message.Body = mixed;
...