nexusbot/lib/controllers/mail_client_controller.dart
2025-08-03 20:01:56 -04:00

50 lines
1.5 KiB
Dart

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<MailClient> {
@override
Future<MailClient> 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<void> 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, MailClient>(
MailClientController.new,
);
}