import "dart:io"; import "package:enough_mail/enough_mail.dart"; import "package:markdown/markdown.dart"; import "package:nexusbot/controllers/settings_controller.dart"; import "package:riverpod/riverpod.dart"; class MailClientController extends AsyncNotifier { @override Future build() async { final settings = ref.watch(SettingsController.provider)!; final account = MailAccount.fromManualSettings( email: settings.email, name: settings.mailName, incomingHost: settings.mailDomain, outgoingHost: settings.mailDomain, password: (await File(settings.smtpPasswordFile).readAsString()).trim(), ); final client = MailClient(account); await client.connect(); return client; } Future sendMessage({ required String plainText, required String markdown, required String subject, required MailAddress to, }) async { final client = await future; final settings = ref.watch(SettingsController.provider)!; return await client.sendMessageBuilder( MessageBuilder.prepareMultipartAlternativeMessage( plainText: plainText, htmlText: markdownToHtml(markdown), ) ..subject = subject ..from = [ MailAddress(settings.mailName, settings.emailAlias ?? settings.email), ] ..to = [to], ); } static final provider = AsyncNotifierProvider( MailClientController.new, ); }