【问题标题】:Why GMail does not recognize meeting request sent from code?为什么 GMail 无法识别代码发送的会议请求?
【发布时间】:2015-02-04 17:28:18
【问题描述】:

我想知道如何发送会议请求以让 GMail 正确识别它?

如果您尝试通过MailMessage 对象将下面给出的 iCalendar 会议请求定义作为替代视图发送给 GMail,这将导致无法识别会议请求:

但是通过 GMail UI 发送的具有完全相同的会议请求的邮件会导致会议请求被识别!令人费解。

有人知道我缺少什么“魔法”吗?

很高兴注意到 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 支持论坛中发现完全相同的问题:Bug: Gmail fails to recognize .ics calendar invitations attached to incoming messages。该问题的日期为 2011 年 6 月,并报告为 2011 年 7 月修复。我在那里创建了新主题:GMail fails to recognize *.ics attachment as a meeting request

【问题讨论】:

  • 您能分享实际发送电子邮件的来源吗?包括所有标题和附件。
  • @Evert,您可以在这里找到完整的电子邮件来源:pastebin.com/MCU6P16Y
  • @Evert,我还添加了转发电子邮件的来源。
  • 这是 python 中的一个示例,工作代码向谷歌日历发送邀请并被识别:stackoverflow.com/a/14648531/1167333
  • @oberron,您提供的代码也会导致无法识别的会议请求。请看截图screencast.com/t/0dgasauEJ8

标签: c# email outlook gmail icalendar


【解决方案1】:

问题似乎不在于 GMAIL 识别会议请求,而在于显示它的问题。我被同样的问题困扰。

在我将 GMAIL 显示语言从设置菜单更改为“英语(美国)”后,它已“修复”。

所以这绝对是一个错误。

【讨论】:

    【解决方案2】:

    如果您使用的是 c#,我设法获得了这个工作的 Outlook web、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);
                        }
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多