Skip to main content

dart_mail 1.0.0 copy "dart_mail: ^1.0.0" to clipboard
dart_mail: ^1.0.0 copied to clipboard

A pure Dart email stack featuring SMTP and IMAP servers, DNS MX resolution, and email relay support.

example/dart_mail_example.dart

import 'dart:io';

import 'package:dart_mail/dns_resolver.dart';
import 'package:dart_mail/email_delivery_client.dart';
import 'package:dart_mail/imap_server.dart';
import 'package:dart_mail/smtp_server.dart';

void main() async {
  // In-memory users and credentials (demo / development / tests only)
  final authProvider = MapAuthProvider({
    'alice@example.com': 'password123',
    'bob@example.com': 'secret',
  });

  // Central mailbox storage:
  // - SMTP writes incoming messages
  // - IMAP exposes stored messages to clients
  final mailboxStore = InMemoryMailboxStore(authProvider);

  // DNS-over-HTTPS resolver used to fetch MX records
  // (replace or customize for production environments)
  final dnsResolver = DNSOverHttpsResolver.google();

  // SMTP delivery client used to relay emails to external domains
  final emailDeliveryClient = SMTPEmailDeliveryClient(
    hostname: 'localhost',
    dnsResolver: dnsResolver,
  );

  // TLS configuration for SMTP, IMAP, and IMAPS
  // Supports self-signed certificates for local testing
  final securityContext = SecurityContext()
    ..useCertificateChain('certs/localhost.pem')
    ..usePrivateKey('certs/localhost.key');

  // SMTP server:
  // - Accepts authenticated mail
  // - Stores local messages
  // - Relays remote messages using MX lookup
  final smtpServer = SMTPServer(
    hostname: '0.0.0.0',
    port: 2525,
    securityContext: securityContext,
    authProvider: authProvider,
    mailboxStore: mailboxStore,
    dnsResolver: dnsResolver,
    emailDeliveryClient: emailDeliveryClient,
  );

  // IMAP server:
  // - Plain IMAP with STARTTLS
  // - Encrypted IMAPS
  final imapServer = IMAPServer(
    hostname: '0.0.0.0',
    mailboxStore: mailboxStore,
    authProvider: authProvider,
    securityContext: securityContext,
    imapPort: 1143,
    imapsPort: 1993,
  );

  await smtpServer.start();
  await imapServer.start();

  print('SMTP server listening on port 2525');
  print('IMAP server listening on port 1143 (STARTTLS)');
  print('IMAPS server listening on port 1993');

  // Handle Ctrl+C for clean shutdown
  ProcessSignal.sigint.watch().listen((_) async {
    await smtpServer.close();
    await imapServer.close();
    exit(0);
  });
}
1
likes
140
points
33
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A pure Dart email stack featuring SMTP and IMAP servers, DNS MX resolution, and email relay support.

Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

collection, diacritic, dns_client, logging, path

More

Packages that depend on dart_mail