Which emailAdapter / mail provider are you using?
You will probably need cron scheduler, and query something like:
const schedule = require("node-schedule");
const rule = new schedule.RecurrenceRule();
rule.hour = 17;
schedule.scheduleJob(rule, async () => {
const query = new Parse.Query("Actions");
query.equalTo("complete", false);
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const lastWeek = new Date();
lastWeek.setDate(lastWeek.getDate() - 7);
const userQuery = new Parse.Query(Parse.User);
userQuery.lessThan("lastOpened", yesterday);
userQuery.lessThan("lastEmailed", lastWeek);
query.matchesQuery("user", userQuery);
query.include("user.firstName", "user.email");
query.exists("user.firstName", "user.email");
const actionsToComplete = await query.find({ useMasterKey: true });
const mailgun = require("mailgun-js")({ apiKey: api_key, domain: domain });
const usersToSave = [];
for (const action of actionsToComplete) {
const user = action.get("user");
const data = {
from: "Excited User <[email protected]>",
to: user.get("email"),
subject: "You have tasks to complete",
text: `Hi ${user.get("firstName")}, you have tasks to complete.}`,
};
mailgun.messages().send(data);
user.set("lastEmailed", new Date());
usersToSave.push(user);
}
await Parse.Object.saveAll(usersToSave, { useMasterKey: true });
});
Obviously this depends on your data structure or mail provider.