-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathemail.js
More file actions
89 lines (80 loc) · 3.26 KB
/
Copy pathemail.js
File metadata and controls
89 lines (80 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// email.gs
/**
* Menu entry point — runs sendReminderEmailsCore() and shows a summary alert.
*/
function sendReminderEmails() {
try {
const count = sendReminderEmailsCore();
SpreadsheetApp.getUi().alert(`Påmindelser sendt til ${count} frivillige der ikke har udfyldt skemaet.`);
} catch (error) {
Logger.log(`Error in sendReminderEmails: ${error}`);
SpreadsheetApp.getUi().alert(`An error occurred: ${error.message}`);
}
}
/**
* Core logic — sends reminder emails and returns the number of emails sent.
* Safe to call from the sidebar (no UI alerts).
* @return {number} Number of reminder emails sent.
*/
function sendReminderEmailsCore() {
const volunteerList = getVolunteerList();
const incompleteVolunteers = volunteerList.filter(v => v[6] === 'Nej');
incompleteVolunteers.forEach(v => {
Logger.log(`Sending reminder to ${v[0]} (${v[5]})`);
sendReminderEmail(v[0], v[5]);
});
Logger.log(`Reminder emails sent to ${incompleteVolunteers.length} volunteers.`);
return incompleteVolunteers.length;
}
/**
* Sends a personalised HTML reminder email to a single volunteer.
* Logs and returns if the volunteer's sheet is missing — does not throw.
* @param {string} name - Volunteer name (must match their sheet name).
* @param {string} email - Volunteer email address.
*/
function sendReminderEmail(name, email) {
try {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const volunteerSheet = spreadsheet.getSheetByName(name);
if (!volunteerSheet) {
Logger.log(`Sheet not found for volunteer: ${name}, skipping.`);
return;
}
const spreadsheetUrl = `https://docs.google.com/spreadsheets/d/${spreadsheet.getId()}/edit#gid=${volunteerSheet.getSheetId()}`;
const htmlMessage = `
<div style="font-family: Arial, sans-serif; color: #333;">
<div style="text-align: center;">
<img src="https://raw.githubusercontent.com/cafeen/CafeLogo/refs/heads/master/cafeen_logo.svg"
alt="Caféen? logo" style="max-width: 200px; height: auto;"/>
</div>
<p>Hej ${name},</p>
<p>
Dette er en venlig påmindelse om at udfylde dine vagtpræferencer for den kommende blok.
Vi har bemærket, at dit skema enten ikke er udfyldt eller kun er delvist udfyldt.
</p>
<p>Brug linket nedenfor for at gå til vagtskemaet:</p>
<p style="text-align: center;">
<a href="${spreadsheetUrl}"
style="background-color: #2e7d32; color: #fff; padding: 10px 20px;
text-decoration: none; border-radius: 5px; font-weight: bold;">
Udfyld vagtskema
</a>
</p>
<p>
Svar endelig tilbage på denne mail hvis du har problemer med at udfylde vagtskemaet.
Du er selvfølgelig også velkommen til at skrive på Messenger eller Discord.
</p>
<p>Venlig hilsen,<br/>Vagtplanlægnings-ansvarlige</p>
</div>
`;
MailApp.sendEmail({
to: email,
subject: 'C? Reminder: Husk at udfylde vagtskema!',
htmlBody: htmlMessage,
name: 'Caféen?',
});
Logger.log(`Reminder email sent to ${name} at ${email}.`);
} catch (error) {
Logger.log(`Error sending email to ${name} at ${email}: ${error}`);
}
}