Google Calender Api v3 .net Отправить уведомление по электронной почте, когда участник отвечает на событие - PullRequest
0 голосов
/ 28 мая 2018

Я использую Google Calendar Api v3 для .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)или как сделать так, чтобы календарь Google отправлял по электронной почте уведомление организатору мероприятия, когда какой-либо участник отвечает на событие (да или нет)

  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 голосов
/ 28 мая 2018

События имеют один органайзер - календарь, содержащий основную копию события.События также могут иметь несколько участников.Участник обычно является основным календарем приглашенного пользователя.

Если учетная запись службы установлена ​​как организатор, то вы отправляете события от имени учетной записи службы.Который является фиктивным пользователем.Когда он приглашает пользователя на четное время, пользователь будет уведомлен о том, что человек, который создал событие, добавил их в этом случае его "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();

код разорваниз Пример событий

Порядок проверки этой идеи.

  1. Создание события.
  2. Обновление обновления патчаорганизатор должен быть самим собой, а не служебной учетной записью.
  3. Проведите мероприятие, чтобы увидеть его, или вы не смогли обновить это поле.Документация говорит, что это должно быть доступно для записи.
  4. Добавьте участника к событию.проверьте, с какого электронного письма оно было отправлено.

ЕСЛИ оно все еще не работает, попробуйте указать ваше электронное письмо как владельца, так и организатора, но я беспокоюсь, что учетная запись службы не сможет изменить его.

...