Почему GMail не распознает приглашение на собрание, отправленное из кода?

Мне интересно, как отправить приглашение на собрание, чтобы позволить GMail правильно его распознать?

Если вы попытаетесь отправить определение приглашения на собрание iCalendar, приведенное ниже, в качестве альтернативного представления, используя обычный код (также приведенный ниже), через MailMessage Объектом GMail будет приведен нераспознанный запрос на встречу:

Но письмо с точно таким же запросом на встречу, отправленное через интерфейс GMail, приводит к распознанному приглашению на встречу! Непонятные.

Кто-нибудь знает, какую "магию" мне не хватает?

Приятно отметить, что Outlook правильно распознает точно такой же запрос о встрече, отправленный по указанному коду.

Код для отправки почты с приглашением на встречу:

class Program
{
    static string From = "sender@example.com";
    static string TimeFormat = "yyyyMMdd\\THHmmss\\Z";
    static string To = "target@example.dom";

    static void Main(string[] args)
    {
        string content = ReadFile("event-template.ics");

        content = content.Replace("#TO#", To);
        content = content.Replace("#FROM#", From);
        content = content.Replace("#UID#", Guid.NewGuid().ToString().Replace("-", ""));
        content = content.Replace("#CREATED-AT#", DateTime.UtcNow.AddDays(-1).ToString(TimeFormat));
        content = content.Replace("#DTSTART#", DateTime.UtcNow.AddDays(1).ToString(TimeFormat));
        content = content.Replace("#DTEND#", DateTime.UtcNow.AddDays(1).AddHours(1).ToString(TimeFormat));

        MailMessage message = new MailMessage();
        message.From = new MailAddress(From);
        message.To.Add(new MailAddress(To));
        message.Subject = "Meeting Request from Code!";

        var iCalendarContentType = new ContentType("text/calendar; method=REQUEST");

        var calendarView = AlternateView.CreateAlternateViewFromString(content, iCalendarContentType);
        calendarView.TransferEncoding = TransferEncoding.SevenBit;
        message.AlternateViews.Add(calendarView);

        using (var smtp = new SmtpClient())
        {
            smtp.Send(message);
        }
    }

    public static string ReadFile(string fileName)
    {
        using (StreamReader r = new StreamReader(fileName))
        {
            return r.ReadToEnd();
        }
    }
}

Определение шаблона iCalendar:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//A//B//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER;CN="Organizer":mailto:#FROM#
ATTENDEE;CN="Attendee";CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=
 NEEDS-ACTION;RSVP=TRUE:mailto:#TO#
DTSTART:#DTSTART#
DTEND:#DTEND#
LOCATION:Location test
TRANSP:OPAQUE
SEQUENCE:0
UID:#UID#
DTSTAMP:#CREATED-AT#
CREATED:#CREATED-AT#
LAST-MODIFIED:#CREATED-AT#
DESCRIPTION:Test description\n
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR

UPD. Источник электронного письма, сгенерированного кодом и полученного GMail (не признанного GMail как приглашение на собрание): http://pastebin.com/MCU6P16Y.

Источник электронной почты, составленный GMail во время пересылки (признанная ошибка): http://pastebin.com/zfbbj9Gg

ВАЖНОЕ ОБНОВЛЕНИЕ. Просто меняю цель с моего письма (<my>@gmail.com) моему коллеге (<colleague>@gmail.com) и он начинает распознавать правильно! Теперь это определенно выглядит как вопрос GMail. (Я отправляю письмо с адреса, отличного от целевого, конечно)

ОБНОВИТЬ. На форуме поддержки GMail обнаружена точно такая же проблема: Ошибка: Gmail не может распознать приглашения календаря.ics, прикрепленные к входящим сообщениям. Проблема, датированная июнем 2011 года, с сообщением, исправленным на июль 2011 года. Я создал новую тему там: GMail не может распознать вложение *.ics в качестве приглашения на собрание.

2 ответа

Кажется, что проблема не в том, что GMAIL распознает приглашение на собрание, а в том, что он не отображается. Я был прослушан той же проблемой.

Это было "исправлено" после того, как я изменил язык отображения GMAIL на "Английский (США)" в меню "Настройки".

Так что это определенно ошибка.

Если вы используете C#, мне удалось получить эту рабочую веб-версию Outlook, Gmail, Outlook 2016.

Похоже, что вам нужно сделать, это добавить альтернативное представление, это не работает, когда у вас есть несколько представлений, но работает для вашего примера выше.

Альтернативный вид ниже:

                    var ct = new ContentType("text/calendar");

                    if (ct.Parameters != null)
                    {
                        ct.Parameters.Add("method", "REQUEST");
                        ct.Parameters.Add("charSet", "utf-8");

                        var avCal = AlternateView.CreateAlternateViewFromString(calendarAppt.ToString(), ct);
                        avCal.TransferEncoding = TransferEncoding.Base64;
                        mail.AlternateViews.Add(avCal);
                    }
Другие вопросы по тегам