GGlyphDocs

configuration

Email Providers

Configure invitation emails via Resend, SendGrid, Mailgun, or SMTP.

Glyph sends emails for invitations only - no notifications, password resets, or marketing. Without an email provider, invitations still work but the link must be shared manually.

Provider priority

Glyph picks the first configured provider in this order:

  1. Resend (RESEND_API_KEY)
  2. SendGrid (SENDGRID_API_KEY)
  3. Mailgun (MAILGUN_API_KEY + MAILGUN_DOMAIN)
  4. SMTP (SMTP_HOST + SMTP_USER + SMTP_PASSWORD)

Configure exactly one - extra ones are ignored.

Sender address

EMAIL_FROM=noreply@yourdomain.com

Required by all providers. The domain should be one you control and have verified with your provider's DNS records (SPF, DKIM, DMARC). Otherwise emails will land in spam or be rejected.


The simplest option. Free tier is generous and covers most self-hosted use cases.

  1. Sign up at resend.com.
  2. Verify your sending domain.
  3. Create an API key.
  4. Add to .env:
RESEND_API_KEY=re_xxxxxxxxxxxxx
EMAIL_FROM=noreply@yourdomain.com
  1. Restart the backend.

SendGrid

  1. Sign up at sendgrid.com.
  2. Verify your sender identity (single sender or domain).
  3. Create an API key with Mail Send permission.
  4. Add to .env:
SENDGRID_API_KEY=SG.xxxxxxxxxxxxx
EMAIL_FROM=noreply@yourdomain.com

Mailgun

  1. Sign up at mailgun.com.
  2. Add and verify your sending domain.
  3. Get the Private API key from your Mailgun dashboard.
  4. Add to .env:
MAILGUN_API_KEY=key-xxxxxxxxxxxxx
MAILGUN_DOMAIN=mg.yourdomain.com
EMAIL_FROM=noreply@yourdomain.com

Both MAILGUN_API_KEY and MAILGUN_DOMAIN are required.


SMTP (any provider)

For Gmail, Microsoft 365, Zoho, your own server, or any other SMTP-capable mailbox.

SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=user@example.com
SMTP_PASSWORD=app-specific-password
EMAIL_FROM=user@example.com

Glyph uses STARTTLS by default. Port 465 switches to implicit TLS automatically.

Gmail

SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=you@gmail.com
SMTP_PASSWORD=xxxx-xxxx-xxxx-xxxx
EMAIL_FROM=you@gmail.com

Gmail requires a 2-Step Verification + App Password - your regular Gmail password won't work. Generate an App Password at myaccount.google.com/apppasswords.

Microsoft 365

SMTP_HOST=smtp.office365.com
SMTP_PORT=587
SMTP_USER=you@yourcompany.com
SMTP_PASSWORD=your-password
EMAIL_FROM=you@yourcompany.com

Zoho Mail

SMTP_HOST=smtp.zoho.com
SMTP_PORT=587
SMTP_USER=you@yourdomain.com
SMTP_PASSWORD=your-password
EMAIL_FROM=you@yourdomain.com

No email provider

Leave all four sets empty. Glyph creates invitations but skips sending email - the invitation link is shown in the UI for you to copy and paste into Slack / Teams / a DM.

This works fine for small teams that already have a chat tool.

You can switch from "no email" to a real provider at any time. Existing pending invitations don't get auto-emailed retroactively, but new ones will.

Testing

After configuring, test by inviting a member to a workspace. Check both:

  • The recipient's inbox (and spam folder)
  • The backend logs: docker compose logs backend | grep -i email

A 401 or 403 in the logs means a bad API key or unverified sender domain.