Email for schools, colleges and course platforms
Updated
Education products send email around a calendar: applications open, deadlines approach, terms start, results release. The volume is spiky and the content is personal, which shapes how you build it.
The workflows
| Moment | Email | Notes | |---|---|---| | Account created | Verification | Before any application data is collected | | Application submitted | Receipt with reference | The applicant's proof | | Status changed | "Your application status was updated" | Link to the portal, do not put the decision in the email if you prefer privacy | | Offer or enrolment | Next steps and deadline | One clear action | | Timetable change | Short change notice | Immediate | | Deadline coming | Reminder | Scheduled by your own job | | Results ready | "Results are available" | Link to a signed-in page | | Guardian contact | Notice to a parent or guardian | Their own address and consent record |
Keep sensitive details behind a login
An email can be forwarded, read on a shared device or sit in a mailbox for years. For grades, decisions and personal details, send a short notice and a link, and show the content after sign-in. This also works around the API's lack of attachments.
Example: application status change (Python)
import os
from inboxili import Inboxili, InboxiliError
client = Inboxili(os.environ["INBOXILI_API_KEY"])
def notify_status_change(db, application):
if not db.claim_notification(application.id, application.status): # unique on (application, status)
return
try:
client.emails.send(
to=application.applicant_email,
from_email="admissions@yourcollege.edu",
from_name="Admissions Office",
subject="Update on your application {{reference}}",
html_body='<p>Hi {{name}}, there is an update on application {{reference}}. <a href="{{url}}">Sign in to view it</a>.</p>',
text_body=f"There is an update on application {application.reference}: {application.portal_url}",
template_data={"name": application.first_name, "reference": application.reference, "url": application.portal_url},
)
except InboxiliError as e:
db.release_notification(application.id, application.status)
raise RuntimeError(f"admissions email failed: {e.status} {e.code}") from e
Claiming the notification first makes it safe to run twice. The from_email must be a verified sender, so verify the institution's domain (or the specific department subdomain) before the first send.
Planning for term start
- Volume. A cohort onboarding all at once should be queued and paced under the 120 requests per minute key limit.
- Time zones. Applicants may be anywhere. State deadlines with the zone.
- Departments. Use separate sending addresses for admissions, finance and support so each builds its own reputation.
- Minors. If you email under-age students or guardians, record whose address it is and on what basis you hold it. Local rules differ and this page is not legal advice.
What Inboxili does not do for you
There are no attachments, CC or BCC, and no built-in scheduling. Schedule deadline reminders in your own job queue. Course-wide announcements and newsletters belong in campaigns, not the API.
Frequently asked questions
- Can I send a transcript or certificate as an attachment?
- Not through the Inboxili API, which has no attachment field. Email a secure link to a page behind the student's login.
- How do I handle many students at once?
- Queue the sends and pace them below 120 requests per minute per key. A results release for thousands of students takes minutes, not seconds.
Start sending student email
Create a workspace, verify a domain, and make your first API call.