Google Calender Api v3 .net当与会者回复活动

时间:2018-05-28 07:30:17

标签: c# google-api google-api-dotnet-client service-accounts google-calendar-api

我在我的项目中使用Google Calendar Api v3 for .Net。我需要创建活动并在任何与会者回复活动时发送通知("是","否")。我阅读了api文档并尝试了它的内容。以下是我创建服务帐户凭据并使用管理器和创建者信息创建活动的代码。

我有域名" example.net"并尝试使用具有电子邮件的组织者创建活动" organizer@example.net"组织者和参与者都可以来自不同的领域,例如" gmail,outlook"。

但每当我创建活动时,api会自动向与会者发送有关活动信息的电子邮件,但组织者看起来像" calendar@example-calendar.iam.gserviceaccount.com"这是在" calendar.json"中定义的。文件。因此,只要与会者回复该活动,组织者就无法收到有关参与者回复活动的电子邮件。我无法将组织者设置为" organizer@example.com" ;,它总是" calendar@example-calendar.iam.gserviceaccount.com"。

请查看下面的代码并告诉我如何将组织者,活动的创建者设置为" organizer@example.com" (也可以在不同的电子邮件地址中使用不同的域名,例如gmail,outlook),或者当任何与会者回复活动时,我如何让谷歌日历向活动组织者发送电子邮件通知(是或否)

  private static Event SendCalendarInvitation()
    {
        try
        {
            string credPath = @"C:\calendar.json";

            var json = File.ReadAllText(credPath);
            var cr = JsonConvert.DeserializeObject<PersonalServiceAccountCred>(json); 

            var xCred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(cr.client_email)
            {
                Scopes = new[] {
                    CalendarService.Scope.Calendar
                }
            }.FromPrivateKey(cr.private_key));

            // Create the service

            CalendarService service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = xCred
            });

            Event calendarEvent = new Event
            {
                Summary = "Example Event",
                Location = "Los Angeles",
                Description = "Description",
                Start = new EventDateTime()
                {
                    DateTime = new DateTime(2018, 6, 2, 10, 0, 0),
                    TimeZone = "America/Los_Angeles"
                },
                End = new EventDateTime()
                {
                    DateTime = new DateTime(2018, 6, 2, 12, 0, 0),
                    TimeZone = "America/Los_Angeles"
                },
                Attendees = new List<EventAttendee>()
                {
                    new EventAttendee() { Email = "organizer@example.com", Organizer = true},
                    new EventAttendee() { Email = "attendee@gmail.com"}
                },
                Creator = new Event.CreatorData()
                {
                    Email = "organizer@example.com",
                    DisplayName = "Organizer"
                },
                Organizer = new Event.OrganizerData()
                {
                    Email = "organizer@example.com",
                    DisplayName = "Organizer"
                },
                Reminders = new Event.RemindersData()
                {
                    UseDefault = false,
                    Overrides = new List<EventReminder>()
                    {
                        new EventReminder()
                        {
                            Method = "email",
                            Minutes = 30
                        },
                        new EventReminder()
                        {
                            Method = "email",
                            Minutes = 14400
                        }
                    }
                }
            };

            Event calendarEventResult = null;

            var statusCode = System.Net.HttpStatusCode.Accepted;
            try
            {
                var request = service.Events.Insert(calendarEvent, "primary");
                request.SendNotifications = true;
                calendarEventResult = request.Execute();
            }
            catch (Exception ex)
            {
                statusCode = System.Net.HttpStatusCode.BadRequest;
            }
            return calendarEventResult;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

1 个答案:

答案 0 :(得分:0)

  

事件有一个组织者,它是包含事件主副本的日历。活动也可以有多个与会者。与会者通常是受邀用户的主要日历。

如果服务帐户设置为组织者,那么您将代表服务帐户发送事件。这是一个愚蠢的用户。当邀请用户参加偶数时,将通知用户创建该活动的人在这种情况下添加了他们的&#34; calendar@example-calendar.iam.gserviceaccount.com"没有办法改变这一点。

我还没试过这个。但是,如果您执行Event.patch并让服务帐户将您的个人帐户设置为组织者,则应该从您而不是服务帐户发送邮件。

// Building the initial request.
var request = service.Events.Patch(body, calendarId, eventId);

// Applying optional parameters to the request.                
request = (EventsResource.PatchRequest)SampleHelpers.ApplyOptionalParms(request, optional);

// Requesting data.
return request.Execute();

代码摘自Events sample

测试这个想法的顺序。

  1. 创建活动。
  2. 将事件更新为自己,而不是服务帐户。
  3. 您可以更新此字段,查看事件是否枯萎。文档说它应该是可写的。
  4. 为活动添加与会者。检查发送的电子邮件。
  5. 如果它仍然无法正常工作,请尝试将您的电子邮件设置为所有者和组织者,但我担心服务帐户将无法对其进行编辑。