Last active
February 26, 2024 14:38
-
-
Save catrincm/b7fce07a26f85be4331ae04a14fe9743 to your computer and use it in GitHub Desktop.
Email yourself weekly calendar agenda with google apps script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
EMAILRECIPIANT = "myemail@gmail.com"; | |
function agendaEmail() { | |
let dateOptions = { weekday: 'long', month: 'long', day: 'numeric'}; | |
let timeOptions = { hour12:true, hour:'numeric', minute:'numeric'}; | |
var StartDate = new Date(); | |
Logger.log('from: ' + StartDate); | |
var EndDate = new Date(StartDate); | |
EndDate.setDate(EndDate.getDate() + 7); | |
Logger.log('until: ' +EndDate); | |
var calendars = CalendarApp.getAllCalendars(); // to view events from all calendars owned or subscribed to. | |
/* | |
// To view events from listed calendars: | |
var calendarsById = ['myemail@gmail.com','asdfoij8wef9o12ijrl@import.calendar.google.com']; | |
var calendars = []; | |
for (i = 0; i < calendarsById.length; i++){ | |
calendars.push(CalendarApp.getCalendarById(calendarsById[i])); | |
} | |
*/ | |
Logger.log('Displaying events from %s calendars.', calendars.length); | |
var events = []; | |
for (i = 0; i < calendars.length; i++){ | |
var thisCal = calendars[i]; | |
Logger.log("calendar: " + thisCal.getName()); | |
var thisCalEvents = thisCal.getEvents(StartDate, EndDate); | |
for (j = 0; j < thisCalEvents.length; j++){ | |
var thisCalEvent = thisCalEvents[j]; | |
// if it is an allday event, then "enddate" is midnight the day after it. So minus one minute from it. (It'd be better to do this in events.push itself, but im not sure how. ) | |
var endtime = thisCalEvent.getEndTime() | |
if (thisCalEvent.isAllDayEvent()) { | |
endtime.setMinutes(endtime.getMinutes() - 1); | |
} | |
events.push({ | |
all_day: thisCalEvent.isAllDayEvent(), | |
calendar: thisCal.getName(), | |
start_time: thisCalEvent.getStartTime(), | |
end_time: endtime, | |
title: thisCalEvent.getTitle(), | |
description: thisCalEvent.getDescription().replace(new RegExp('\r?\n','g'), '<br />').replace(new RegExp('<http([^>]*)>'),' (<a href="http$1">link</a>)'), | |
location: thisCalEvent.getLocation() | |
}); | |
} | |
} | |
Logger.log('number of events: ' + events.length); | |
events.sort(function(a, b){ | |
return a.start_time-b.start_time | |
}); | |
// The email contains two lists of all the events: firstly a summary itemized list just with title and day/time, then a "further details" part. | |
var eventsSummaryMessage = "Events this week:" | |
var eventsFurtherMessage = "Further information:" | |
eventsSummaryMessage += "<br><ul>"; | |
eventsFurtherMessage += "<br>"; | |
if (events.length > 0) { | |
for (k = 0; k < events.length; k++){ | |
var thisEvent = events[k]; | |
Logger.log('printing event: ' + thisEvent.title); | |
eventsFurtherMessage += '<p style="border-top: 1px black solid"><br />'; | |
eventsSummaryMessage += '<li>'; | |
eventsSummaryMessage += thisEvent.title; | |
eventsFurtherMessage += '<strong>' + thisEvent.title + '</strong><br />'; | |
// date display depends on: whether it is all day event, and whether starting date and ending date are equal. | |
if (thisEvent.all_day){ | |
if (thisEvent.start_time.getDate() == thisEvent.end_time.getDate()) { | |
eventsFurtherMessage += thisEvent.start_time.toLocaleString({},dateOptions) + '<br />'; | |
eventsSummaryMessage += " (" + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ")"; | |
} else{ | |
eventsFurtherMessage += thisEvent.start_time.toLocaleString({},dateOptions) + ' - ' + thisEvent.start_time.toLocaleString({},dateOptions) + '<br />'; | |
eventsSummaryMessage += " (" + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ' - ' + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ")"; | |
} | |
} else { | |
if (thisEvent.start_time.getDate() == thisEvent.end_time.getDate()) { | |
eventsFurtherMessage += thisEvent.start_time.toLocaleString({},dateOptions) + ", " + thisEvent.start_time.toLocaleString({},timeOptions) | |
+ " - " + thisEvent.end_time.toLocaleString({},timeOptions) + '<br />'; | |
eventsSummaryMessage += " (" + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ', ' + thisEvent.start_time.toLocaleString({},timeOptions) + ")"; | |
} else{ | |
eventsFurtherMessage += thisEvent.start_time.toLocaleString({},dateOptions) + ", " + thisEvent.start_time.toLocaleString({},timeOptions) | |
+ ' - ' + thisEvent.end_time.toLocaleString({},dateOptions) + ", " + thisEvent.end_time.toLocaleString({},timeOptions) + '<br />'; | |
eventsSummaryMessage += " (" + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ' - ' + thisEvent.start_time.toLocaleString({},{weekday: 'short'}) + ")"; | |
} | |
} | |
if (calendars.length > 1) { | |
eventsFurtherMessage += '<br>Calendar: ' + thisEvent.calendar; | |
} | |
if (thisEvent.location) { | |
eventsFurtherMessage += '<br>Where: ' + thisEvent.location + '<p>'; | |
} | |
if (thisEvent.description) { | |
eventsFurtherMessage += thisEvent.description; | |
} | |
eventsSummaryMessage += '</li>'; | |
eventsFurtherMessage += '</p>'; | |
} | |
eventsSummaryMessage += '</ul>'; | |
var message = "<p>" + eventsSummaryMessage + "</p><p>" + eventsFurtherMessage ; | |
} else { | |
message += '<p>Nothing on any of your calendars this week.</p>'; | |
} | |
Logger.log('message: \n\n' + message); | |
MailApp.sendEmail(EMAILRECIPIANT, "Events this week", message, {htmlBody: message}); | |
} |
original code was https://gist.github.com/aliveawakened/d9c631606712dfdcb0308caa1014abcc
Awesome script.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How to use: