SmtpEmailService (nodemailer 9.0.5, exact-pinned) behind the existing EmailService seam. Provider resolution: EMAIL_PROVIDER wins, else RESEND_API_KEY selects Resend (hosted byte-identical), else SMTP_HOST selects SMTP. From header is built exactly like the Resend service after #1956 (no 'via <app>', fromAddress honored, platform-sender retry). STARTTLS is required by default (requireTLS) with SMTP_REQUIRE_TLS=false as an explicit opt-out for a plaintext LAN relay. Docs, env examples and the generated extension registry updated.
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import { describe, it, expect, afterEach, vi } from 'vitest'
|
|
import { createEmailService, resolveEmailProvider } from '../lib/email-provider'
|
|
import { ResendEmailService } from '../lib/resend-service'
|
|
import { SmtpEmailService } from '../lib/smtp-service'
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllEnvs()
|
|
})
|
|
|
|
describe('resolveEmailProvider', () => {
|
|
it('defaults to resend when nothing is configured (unconfigured = no-op, as before)', () => {
|
|
vi.stubEnv('EMAIL_PROVIDER', '')
|
|
vi.stubEnv('RESEND_API_KEY', '')
|
|
vi.stubEnv('SMTP_HOST', '')
|
|
expect(resolveEmailProvider()).toBe('resend')
|
|
expect(createEmailService()).toBeInstanceOf(ResendEmailService)
|
|
})
|
|
|
|
it('picks smtp from SMTP_HOST when no Resend key exists (self-host path)', () => {
|
|
vi.stubEnv('EMAIL_PROVIDER', '')
|
|
vi.stubEnv('RESEND_API_KEY', '')
|
|
vi.stubEnv('SMTP_HOST', 'smtp.example.se')
|
|
expect(resolveEmailProvider()).toBe('smtp')
|
|
expect(createEmailService()).toBeInstanceOf(SmtpEmailService)
|
|
})
|
|
|
|
// Hosted stays hosted: SMTP variables on the side never move mail.
|
|
it('keeps Resend when both are present', () => {
|
|
vi.stubEnv('EMAIL_PROVIDER', '')
|
|
vi.stubEnv('RESEND_API_KEY', 're_x')
|
|
vi.stubEnv('SMTP_HOST', 'smtp.example.se')
|
|
expect(resolveEmailProvider()).toBe('resend')
|
|
})
|
|
|
|
it('honours EMAIL_PROVIDER as the explicit choice, case-insensitively', () => {
|
|
vi.stubEnv('RESEND_API_KEY', 're_x')
|
|
vi.stubEnv('EMAIL_PROVIDER', ' SMTP ')
|
|
expect(resolveEmailProvider()).toBe('smtp')
|
|
vi.stubEnv('EMAIL_PROVIDER', 'resend')
|
|
vi.stubEnv('RESEND_API_KEY', '')
|
|
vi.stubEnv('SMTP_HOST', 'smtp.example.se')
|
|
expect(resolveEmailProvider()).toBe('resend')
|
|
})
|
|
|
|
it('ignores an unknown EMAIL_PROVIDER value', () => {
|
|
vi.stubEnv('EMAIL_PROVIDER', 'sendgrid')
|
|
vi.stubEnv('RESEND_API_KEY', '')
|
|
vi.stubEnv('SMTP_HOST', 'smtp.example.se')
|
|
expect(resolveEmailProvider()).toBe('smtp')
|
|
})
|
|
})
|