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

Email sending for the Darto ecosystem — a small Mailer API with an SMTP transport plus console/memory transports for dev and tests.


Darto Logo


darto_mailer #

Email sending for the Darto ecosystem — a small Mailer API with an SMTP transport, plus console and memory transports for development and tests.

Install #

dependencies:
  darto_mailer: ^1.0.0

Quick start #

import 'package:darto_mailer/darto_mailer.dart';

final mailer = Mailer(
  from: 'no-reply@example.com',
  transport: SmtpTransport(
    host: 'smtp.example.com',
    port: 587,
    username: env.smtpUser,
    password: env.smtpPass,
    security: SmtpSecurity.starttls, // none | ssl | starttls
  ),
);

await mailer.send(Message(
  to: 'user@example.com',
  subject: 'Welcome!',
  text: 'Hello, welcome aboard.',
  html: '<h1>Hello!</h1><p>Welcome aboard.</p>',
));

Recipients, cc/bcc and attachments #

await mailer.send(Message(
  to: ['a@x.com', 'b@x.com'],
  cc: 'manager@x.com',
  bcc: 'audit@x.com',
  replyTo: 'support@x.com',
  subject: 'Monthly report',
  html: '<p>See attached.</p>',
  attachments: [
    Attachment.file('report.pdf'),
    Attachment.bytes('logo.png', bytes, contentType: 'image/png'),
    Attachment.string('notes.txt', 'plain notes'),
  ],
));

to / cc / bcc accept either a single String or an Iterable<String>.

Dev & test transports (no network) #

// Dev — prints a summary instead of sending
final mailer = Mailer(from: '…', transport: ConsoleTransport());

// Tests — capture messages and assert on them
final box = MemoryTransport();
final mailer = Mailer(from: 'a@b.com', transport: box);
await mailer.send(Message(to: 'x@y.com', subject: 'Hi', text: '…'));
expect(box.sent.single.message.subject, 'Hi');

With darto_di #

final mailerProvider = Provider<Mailer>(
  (di) => Mailer(
    from: 'no-reply@app.com',
    transport: SmtpTransport(host: env.smtpHost, username: …, password: …),
  ),
  onDispose: (m) => m.close(),
);

app.post('/forgot', [], (c) async {
  final mailer = c.read(mailerProvider);
  await mailer.send(Message(to: email, subject: 'Reset', html: resetHtml));
  return c.noContent();
});

Templates #

darto_mailer doesn't ship a template engine — pass html / text you've already rendered. Combine it with darto_view (Mustache / Jinja) to render the body, then drop the result into a Message.

API #

Type Purpose
Mailer({from, transport}) Sends messages; injects the default from
Message({to, cc, bcc, replyTo, subject, text, html, attachments, headers, from}) An email
Attachment.file / .bytes / .string Attachment constructors
MailTransport Interface — send(message, from) + close()
SmtpTransport({host, port, username, password, security}) SMTP delivery (pure-Dart)
SmtpSecurity none / ssl / starttls
ConsoleTransport / MemoryTransport Dev / test transports

Testing the SMTP transport #

The SMTP suite is tagged smtp and boots a disposable Mailpit container (a fake SMTP server with an HTTP API):

dart test --tags smtp     # only the SMTP integration suite
dart test                 # everything (incl. SMTP if Docker is up)

docker must be on the PATH and able to pull (or already have) the axllent/mailpit image.




Support 💖 #

If you find Darto Mailer useful, please consider supporting its development 🌟Buy Me a Coffee.🌟

0
likes
140
points
25
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Email sending for the Darto ecosystem — a small Mailer API with an SMTP transport plus console/memory transports for dev and tests.

Homepage
Repository (GitHub)
View/report issues
Contributing

License

MIT (license)

Dependencies

mailer

More

Packages that depend on darto_mailer