Email Setup: Postmark
Send transactional email through Postmark for high deliverability and detailed delivery analytics.
Configure outgoing email via SMTP. Required for booking confirmations, password resets, and meeting reminders.
Technical Product Builder & AI Developer
.env
file
By the end of this guide, Tymeslot will send booking confirmations, password reset emails, and meeting reminders through your SMTP server.
Email is not optional — it is the delivery mechanism for every automated notification Tymeslot sends. Without it, these flows break silently: your instance appears to work, but attendees never receive confirmations and hosts never know a booking arrived.
Tymeslot sends email for:
Open your .env
file (or your hosting platform's environment variable settings) and add all of the following. Every variable is required.
These apply to all SMTP providers — the provider-specific sections below replace only the
SMTP_*
values.
EMAIL_ADAPTER=smtp
EMAIL_FROM_NAME="Acme Corp"
EMAIL_FROM_ADDRESS=noreply@acme.com
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME=user@example.com
SMTP_PASSWORD=secret
SMTP_SSL=false
SMTP_TLS=true
| Variable | Purpose |
|---|---|
| EMAIL_ADAPTER |
Must be smtp
for generic SMTP. Use
postmark
for Postmark's native adapter.
|
| EMAIL_FROM_NAME | The display name recipients see in their inbox — e.g., "Acme Corp" |
| EMAIL_FROM_ADDRESS | The FROM address recipients see. Must match a domain your SMTP server permits you to send from. |
| SMTP_PORT |
587
for STARTTLS (recommended).
465
for implicit TLS. Avoid
25
— most cloud providers block it.
|
| SMTP_SSL |
Set to true
only when using port
465
(implicit TLS). Leave
false
for port 587.
|
| SMTP_TLS |
Set to true
to enable STARTTLS on port 587. Set to
false
when using port 465.
|
Replace the
SMTP_*
values from Step 1 with the values for your provider. All other variables remain the same.
Google blocks regular Gmail passwords for SMTP connections. You must generate an App Password — a 16-character token that grants SMTP access without exposing your main account password.
To create an App Password:
SMTP_PASSWORD.
After completing those steps, you should see the App Password listed under your account's app passwords. Your Tymeslot instance is now authorized to send via Gmail.
SMTP_HOST=smtp.gmail.com\nSMTP_PORT=587\nSMTP_USERNAME=your.address@gmail.com\nSMTP_PASSWORD=xxxx xxxx xxxx xxxx\nSMTP_SSL=false\nSMTP_TLS=true
If you get "534 Username and Password not accepted"
You are using your regular Google account password. Gmail rejects it for SMTP. Return to Step 2 above and generate an App Password — that is the only credential Gmail accepts here.
SendGrid uses an API key as the SMTP password. The username is always the literal string
apikey
— not your account email.
To get your API key:
SG.
and is shown only once.
After creation, you are returned to the API Keys list. The new key appears with the name you chose. Your sending domain must also be verified under [Settings] → [Sender Authentication] before emails will be delivered.
SMTP_HOST=smtp.sendgrid.net\nSMTP_PORT=587\nSMTP_USERNAME=apikey\nSMTP_PASSWORD=SG.your_api_key_here\nSMTP_SSL=false\nSMTP_TLS=true
SES SMTP credentials are not your AWS access key and secret — they are a separate set of credentials generated specifically for SMTP. Do not use your IAM access keys here.
To generate SES SMTP credentials:
AKIA) and
SMTP Password
go into your environment.
EMAIL_FROM_ADDRESS. SES will not send from an unverified identity.
Once the identity status shows Verified, SES is ready to send. The SMTP endpoint hostname changes by region — use the one shown on the SMTP Settings page.
SMTP_HOST=email-smtp.eu-west-1.amazonaws.com\nSMTP_PORT=587\nSMTP_USERNAME=AKIAIOSFODNN7EXAMPLE\nSMTP_PASSWORD=your_ses_smtp_password\nSMTP_SSL=false\nSMTP_TLS=true
Any provider that exposes standard SMTP works with Tymeslot. Locate the SMTP credentials section in your provider's documentation or dashboard — you need the hostname, port, username, and password.
SMTP_HOST=smtp.your-provider.com\nSMTP_PORT=587\nSMTP_USERNAME=your_smtp_username\nSMTP_PASSWORD=your_smtp_password\nSMTP_SSL=false\nSMTP_TLS=true
SMTP_PORT=465, SMTP_SSL=true, and
SMTP_TLS=false
only when your provider explicitly requires port 465 with implicit TLS. Port 587 with STARTTLS is the modern standard and is preferred.
.env
file and restart Tymeslot. The application reads environment variables only at startup — changes take no effect until you restart.
docker-compose logs tymeslot | grep -Ei 'email|smtp|mailer'
If emails send but land in spam
This is a DNS configuration issue, not an application issue. You need to add SPF, DKIM, and DMARC records for your sending domain. Your SMTP provider's documentation will list the exact DNS record values. Without these records, many mail servers will mark your email as suspicious regardless of what is in the message body.
Start by inspecting the application logs for SMTP errors:
docker-compose logs tymeslot | grep -Ei 'email|smtp|mailer'
The most common causes are incorrect credentials, a firewall blocking the outbound port, or a TLS/SSL mismatch between your SMTP_PORT, SMTP_SSL, and
SMTP_TLS
values. Cross-reference the table in Step 1 against what your provider's documentation specifies.
Port 587
with STARTTLS is the recommended modern standard — use it whenever your provider supports it (SMTP_SSL=false, SMTP_TLS=true). Port
465
uses implicit TLS (the connection is encrypted from the first byte) and requires
SMTP_SSL=true
and SMTP_TLS=false. Avoid port
25
— it was the original SMTP port but most cloud providers (AWS, GCP, Azure, DigitalOcean) block outbound connections on it to prevent spam abuse.
Both Google and Microsoft block standard account passwords for SMTP when two-factor authentication is enabled. You must use an app-specific password instead.
For Gmail, follow the App Password steps in the Gmail section above — a 16-character token is the only credential Gmail will accept for SMTP. For Microsoft 365 / Outlook, go to account.microsoft.com → Security → Advanced security options → App passwords and generate one there. Standard account passwords will always be rejected.
Yes. Amazon SES exposes a standard SMTP interface and works with the generic SMTP adapter. Follow the Amazon SES section in Step 2 to generate dedicated SMTP credentials (do not use your IAM access key and secret directly — SES generates a separate SMTP username and password).
Use the SMTP endpoint hostname for your SES region (shown on the SES SMTP Settings page), port 587, SMTP_SSL=false, and SMTP_TLS=true. Verify your sending domain or address in SES Verified Identities before attempting to send.
Spam placement is almost always a DNS configuration problem, not an application one. Add these three DNS record types for your sending domain:
If you continue to have deliverability problems after adding those records, consider switching to a dedicated transactional email service such as Postmark or Mailgun rather than raw SMTP — they maintain their own sending reputation and handle much of this automatically.
EMAIL_FROM_NAME
and EMAIL_FROM_ADDRESS, not a provider default.
Send transactional email through Postmark for high deliverability and detailed delivery analytics.
Receive instant Telegram messages for every new booking, cancellation, or reschedule. One shared bot, zero credentials for users.
Deploy Tymeslot using Docker and Docker Compose. Perfect for VPS hosting, home servers, or any environment with Docker support.