Hantera Google Kalendrar med Gmail‑klienten
Lägg till, redigera och ta bort Gmail‑kalendrar
Aspose.Email låter applikationer hantera Gmail-kalendrar med hjälp av IGmailClient som tillhandahåller funktioner som att lägga till, ta bort och uppdatera Gmail‑kalendrar. Denna klientklass returnerar en lista med ExtendedCalendar‑objekt som innehåller information om Gmail‑kalenderposter. IGmailClient klass exponerar följande funktioner för kalendrar:
- CreateCalendar Den kan användas för att infoga en ny kalender
- ListCalendars Den kan användas för att hämta listan över alla kalendrar för en klient
- DeleteCalendar Den kan användas för att radera en kalender
- FetchCalendar Den kan användas för att hämta en specifik kalender för en klient
- UpdateCalendar Denna funktion används för att återinföra en modifierad kalender för en klient
För att komma åt kalendrarna initieras GoogleTestUser med Gmail‑kontouppgifter. GoogleOAuthHelper används för att hämta åtkomsttoken för användaren, som sedan används för att initiera IGmailClient.
Infoga, hämta och uppdatera Gmail‑kalendrar
För att lägga till en kalender, initiera ett Calendar‑objekt och sätt in det med hjälp av CreateCalendar() funktion. CreateCalendar() returnerar ID för den nyligen infogade kalendern. Detta ID kan användas för att hämta kalendern från servern. Följande kodsnutt visar hur man infogar, hämtar och uppdaterar en kalender.
// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Insert, get and update calendar
Aspose.Email.Clients.Google.Calendar calendar = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "America/Los_Angeles");
// Insert calendar and Retrieve same calendar using id
string id = client.CreateCalendar(calendar);
Aspose.Email.Clients.Google.Calendar cal = client.FetchCalendar(id);
//Match the retrieved calendar info with local calendar
if ((calendar.Summary == cal.Summary) && (calendar.TimeZone == cal.TimeZone))
{
Console.WriteLine("fetched calendar information matches");
}
else
{
Console.WriteLine("fetched calendar information does not match");
}
// Change information in the fetched calendar and Update calendar
cal.Description = "Description - " + Guid.NewGuid().ToString();
cal.Location = "Location - " + Guid.NewGuid().ToString();
client.UpdateCalendar(cal);
}
Ta bort specifika Google‑kalendrar
För att radera en specifik kalender måste vi hämta listan över alla klientens kalendrar och sedan radera efter behov. ListCalendars() returnerar listan över ExtendedCalendar som innehåller Gmail-kalendrar. Följande kodsnutt visar hur du raderar en specifik kalender.
// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Access and delete calendar with summary starting from "Calendar summary - "
string summary = "Calendar summary - ";
// Get calendars list
ExtendedCalendar[] lst0 = client.ListCalendars();
foreach (ExtendedCalendar extCal in lst0)
{
// Delete selected calendars
if (extCal.Summary.StartsWith(summary))
client.DeleteCalendar(extCal.Id);
}
}
Kalenderåtkomstkontroll
Aspose.Email ger full kontroll över åtkomsten till kalenderposterna. ListAccessRules() funktion exponeras av IGmailClient som returnerar listan över AccessControlRule. Individuell regelinformation kan hämtas, modifieras och sparas tillbaka för en klients kalender. IGmailClient innehåller följande funktioner för att hantera åtkomstkontrollreglerna.
- ListAccessRules Denna funktion ger listan över AccessControlRule
- CreateAccessRule Denna funktion skapar en ny åtkomstregel för en kalender.
- UpdateAccessRule Denna funktion används för att uppdatera en åtkomstregel.
- FetchAccessRule Den kan användas för att hämta en specifik åtkomstregel för en klients kalender
- DeleteAccessRule Denna funktion används för att radera en åtkomstregel.
Följande kodsnutt visar hur du använder funktioner för att hantera åtkomstreglerna:
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Retrieve list of calendars for the current client
ExtendedCalendar[] calendarList = client.ListCalendars();
// Get first calendar id and retrieve list of AccessControlRule for the first calendar
string calendarId = calendarList[0].Id;
AccessControlRule[] roles1 = client.ListAccessRules(calendarId);
// Create a local access control rule and Set rule properties
AccessControlRule rule = new AccessControlRule();
rule.Role = AccessRole.reader;
rule.Scope = new AclScope(AclScopeType.user, User2.EMail);
// Insert new rule for the calendar. It returns the newly created rule
AccessControlRule createdRule = client.CreateAccessRule(calendarId, rule);
// Confirm if local created rule and returned rule are equal
if ((rule.Role == createdRule.Role) && (rule.Scope.Type == createdRule.Scope.Type) && (rule.Scope.Value.ToLower() == createdRule.Scope.Value.ToLower()))
{
Console.WriteLine("local rule and returned rule after creation are equal");
}
else
{
Console.WriteLine("Rule could not be created successfully");
return;
}
// Get list of rules
AccessControlRule[] roles2 = client.ListAccessRules(calendarId);
// Current list length should be 1 more than the earlier one
if (roles1.Length + 1 == roles2.Length)
{
Console.WriteLine("List lengths are ok");
}
else
{
Console.WriteLine("List lengths are not ok");
return;
}
// Change rule and Update the rule for the selected calendar
createdRule.Role = AccessRole.writer;
AccessControlRule updatedRule = client.UpdateAccessRule(calendarId, createdRule);
// Check if returned access control rule after update is ok
if ((createdRule.Role == updatedRule.Role) && (createdRule.Id == updatedRule.Id))
{
Console.WriteLine("Rule is updated successfully");
}
else
{
Console.WriteLine("Rule is not updated");
return;
}
// Retrieve individaul rule against a calendar
AccessControlRule fetchedRule = client.FetchAccessRule(calendarId, createdRule.Id);
//Check if rule parameters are ok
if ((updatedRule.Id == fetchedRule.Id) && (updatedRule.Role == fetchedRule.Role) && (updatedRule.Scope.Type == fetchedRule.Scope.Type) && (updatedRule.Scope.Value.ToLower() == fetchedRule.Scope.Value.ToLower()))
{
Console.WriteLine("Rule parameters are ok");
}
else
{
Console.WriteLine("Rule parameters are not ok");
}
// Delete particular rule against a given calendar and Retrieve the all rules list for the same calendar
client.DeleteAccessRule(calendarId, createdRule.Id);
AccessControlRule[] roles3 = client.ListAccessRules(calendarId);
// Check that current rules list length should be equal to the original list length before adding and deleting the rule
if (roles1.Length == roles3.Length)
{
Console.WriteLine("List lengths are same");
}
else
{
Console.WriteLine("List lengths are not equal");
return;
}
}
Kalenderklientinställningar och färginformation
Aspose.Email stödjer åtkomst till klientinställningarna genom att använda IGmailClient.GetSettings(). Den returnerar listan över inställningar som visas nedan:
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- country
Liknande färginformation för klienter kan också hämtas med IGmailClient.GetColors(). Detta färginformationsobjekt returnerar listan av förgrundsfärger, bakgrundsfärger samt uppdateringsdatum och tid.
Kom åt klientinställningar
Följande kodsnutt visar hur funktionerna kan användas för att komma åt klientinställningarna:
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Retrieve client settings
Dictionary<string, string> settings = client.GetSettings();
if (settings.Count < 1)
{
Console.WriteLine("No settings are available.");
return;
}
// Traverse the settings list
foreach (KeyValuePair<string, string> pair in settings)
{
// Get the setting value and test if settings are ok
string value = client.GetSetting(pair.Key);
if (pair.Value == value)
{
Console.WriteLine("Key = " + pair.Key + ", Value = " + pair.Value);
}
else
{
Console.WriteLine("Settings could not be retrieved");
}
}
}
Få åtkomst till färginformation
Följande kodsnutt visar hur funktionerna kan användas för att komma åt klientens färginställningar.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
ColorsInfo colors = client.GetColors();
Dictionary<string, Colors> palettes = colors.Calendar;
// Traverse the settings list
foreach (KeyValuePair<string, Colors> pair in palettes)
{
Console.WriteLine("Key = " + pair.Key + ", Color = " + pair.Value);
}
Console.WriteLine("Update Date = " + colors.Updated);
}
Hantera Google Kalender‑möten
Aspose.Email erbjuder funktioner för att arbeta med möten i Google‑kalendrar. Följande uppgifter kan utföras på möten i Google Kalender:
- Lägg till möten.
- Hämta lista med möten.
- Hämta ett specifikt möte.
- Uppdatera ett möte.
- Flytta möte från en kalender till en annan.
- Ta bort möte.
IGmailClient tillhandahåller funktioner som CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment och DeleteAppointment.
Lägg till möten i Google Kalender
Följande kodexempel visar funktionen för att lägga till ett möte i en kalender. För att uppnå detta, följ stegen:
- Skapa och infoga en kalender.
- Hämta listan över möten från ett nytt kalender.
- Skapa ett möte.
- Infoga ett möte.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
// Create local calendar
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");
// Insert calendar and get id of inserted calendar and Get back calendar using an id
string id = client.CreateCalendar(calendar1);
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
string calendarId1 = cal1.Id;
try
{
// Retrieve list of appointments from the first calendar
Appointment[] appointments = client.ListAppointments(calendarId1);
if (appointments.Length > 0)
{
Console.WriteLine("Wrong number of appointments");
return;
}
// Get current time and Calculate time after an hour from now
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);
// Initialize a mail address collection and set attendees mail address
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add("User1.EMail@domain.com");
attendees.Add("User3.EMail@domain.com");
// Create an appointment with above attendees
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, User2.EMail, attendees);
// Set appointment summary, description, start/end time zone
app1.Summary = "Summary - " + Guid.NewGuid().ToString();
app1.Description = "Description - " + Guid.NewGuid().ToString();
app1.StartTimeZone = "Europe/Kiev";
app1.EndTimeZone = "Europe/Kiev";
// Insert appointment in the first calendar inserted above and get back inserted appointment
Appointment app2 = client.CreateAppointment(calendarId1, app1);
// Retrieve appointment using unique id
Appointment app3 = client.FetchAppointment(calendarId1, app2.UniqueId);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Hämta och uppdatera Google Kalender‑möten
Här demonstreras hämtning och uppdatering av kalendern på följande sätt:
- Hämta specifikt möte.
- Ändra mötet.
- Uppdatera mötet i kalendern.
Det antas att en kalender med id "calendarId" och ett mötes unika id "AppointmentUniqueId" redan har extraherats. Följande kodsnutt visar hur du hämtar och uppdaterar ett möte.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
string calendarId = client.ListCalendars()[0].Id;
string AppointmentUniqueId = client.ListAppointments(calendarId)[0].UniqueId;
// Retrieve Appointment
Appointment app3 = client.FetchAppointment(calendarId, AppointmentUniqueId);
// Change the appointment information
app3.Summary = "New Summary - " + Guid.NewGuid().ToString();
app3.Description = "New Description - " + Guid.NewGuid().ToString();
app3.Location = "New Location - " + Guid.NewGuid().ToString();
app3.Flags = AppointmentFlags.AllDayEvent;
app3.StartDate = DateTime.Now.AddHours(2);
app3.EndDate = app3.StartDate.AddHours(1);
app3.StartTimeZone = "Europe/Kiev";
app3.EndTimeZone = "Europe/Kiev";
// Update the appointment and get back updated appointment
Appointment app4 = client.UpdateAppointment(calendarId, app3);
}
Flytta och ta bort möten i Google Kalender
Ett möte kan flyttas genom att ange källkalender, destinationskalender och det unika id:t för ett möte i källkalendern. Följande kodsnutt visar hur du flyttar och tar bort ett möte.
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
// Get IGmailclient
using (IGmailClient client = Aspose.Email.Clients.Google.GmailClient.GetInstance(accessToken, User2.EMail))
{
string SourceCalendarId = client.ListCalendars()[0].Id;
string DestinationCalendarId = client.ListCalendars()[1].Id;
string TargetAppUniqueId = client.ListAppointments(SourceCalendarId)[0].UniqueId;
// Retrieve the list of appointments in the destination calendar before moving the appointment
Appointment[] appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("Before moving count = " + appointments.Length);
Appointment Movedapp = client.MoveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId);
// Retrieve the list of appointments in the destination calendar after moving the appointment
appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("After moving count = " + appointments.Length);
// Delete particular appointment from a calendar using unique id
client.DeleteAppointment(DestinationCalendarId, Movedapp.UniqueId);
// Retrieve the list of appointments. It should be one less than the earlier appointments in the destination calendar
appointments = client.ListAppointments(DestinationCalendarId);
Console.WriteLine("After deleting count = " + appointments.Length);
}
FreeBusy‑fråga för Google Kalender
Aspose.Email tillhandahåller en frågemekanism för att kontrollera om ett möte är förfallet eller inte enligt kriterierna. FreebusyQuery‑klassen finns för detta ändamål och möjliggör att förbereda en fråga för en viss kalender.
Detta kodexempel demonstrerar funktionen för att fråga en kalender. Följande uppgifter utförs i exemplet:
- Skapa och infoga en kalender
- Skapa ett möte
- Infoga möte
- Förbered en FreeBusyQuery
- Hämta FreebusyResponse
// Use the GoogleUser and GoogleOAuthHelper classes below to receive an access token
using (IGmailClient client = GmailClient.GetInstance(accessToken, user.Email))
{
// Initialize calendar item
Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");
// Insert calendar and get back id of newly inserted calendar and Fetch the same calendar using calendar id
string id = client.CreateCalendar(calendar1);
Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
string calendarId1 = cal1.Id;
try
{
// Get list of appointments in newly inserted calendar. It should be zero
Appointment[] appointments = client.ListAppointments(calendarId1);
if (appointments.Length != 0)
{
Console.WriteLine("Wrong number of appointments");
return;
}
// Create a new appointment and Calculate appointment start and finish time
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);
// Create attendees list for appointment
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add("user1@domain.com");
attendees.Add("user2@domain.com");
// Create appointment
Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, "user2@domain.com", attendees);
app1.Summary = "Summary - " + Guid.NewGuid().ToString();
app1.Description = "Description - " + Guid.NewGuid().ToString();
app1.StartTimeZone = "Europe/Kiev";
app1.EndTimeZone = "Europe/Kiev";
// Insert the newly created appointment and get back the same in case of successful insertion
Appointment app2 = client.CreateAppointment(calendarId1, app1);
// Create Freebusy query by setting min/max timeand time zone
FreebusyQuery query = new FreebusyQuery();
query.TimeMin = DateTime.Now.AddDays(-1);
query.TimeMax = DateTime.Now.AddDays(1);
query.TimeZone = "Europe/Kiev";
// Set calendar item to search and Get the reponse of query containing
query.Items.Add(cal1.Id);
FreebusyResponse resp = client.GetFreebusyInfo(query);
// Delete the appointment
client.DeleteAppointment(calendarId1, app2.UniqueId);
}
finally
{
// Delete the calendar
client.DeleteCalendar(cal1.Id);
}
}