store method

  1. @override
Future<List<String>> store({
  1. required String from,
  2. required List<String> to,
  3. required String body,
})
override

Implementation

@override
Future<List<String>> store({
  required String from,
  required List<String> to,
  required String body,
}) async {
  var mailboxes = resolveMailboxes(to);
  if (mailboxes.isEmpty) return [];

  var deliveredTo = <String>[];

  for (var mailbox in mailboxes) {
    if (!authProvider.hasUser(mailbox)) {
      continue;
    }

    var mailboxDir = resolveMailboxDirectory(mailbox);

    await mailboxDir.create(recursive: true);

    var storeID = (++_storeCount) % 1000;
    var storeIDStr = '$storeID'.padLeft(3, '0');

    var mailFile = File(
      path.join(
        mailboxDir.path,
        '${DateTime.now().millisecondsSinceEpoch}$storeIDStr.eml',
      ),
    );

    await mailFile.writeAsString('From: $from\nTo: ${to.join(', ')}\n$body');

    deliveredTo.add(mailbox);

    _log.info(
      "Stored e-mail from `$from` to `${to.join(', ')}` at: ${mailFile.path}",
    );
  }

  return deliveredTo;
}