50 lines
1.5 KiB
Dart
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,
|
|
);
|
|
}
|