use diff mail client

This commit is contained in:
Henry Hiles 2026-02-28 19:48:50 -05:00
commit 2ccfd214e1
No known key found for this signature in database
7 changed files with 113 additions and 162 deletions

View file

@ -1,56 +1,52 @@
import "dart:io";
import "package:enough_mail/enough_mail.dart";
import "package:mailer/mailer.dart";
import "package:mailer/mailer.dart" as mailer;
import 'package:mailer/smtp_server.dart';
import "package:markdown/markdown.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:riverpod/riverpod.dart";
class MailClientController extends AutoDisposeAsyncNotifier<MailClient> {
class MailClientController extends AutoDisposeAsyncNotifier<SmtpServer> {
@override
Future<MailClient> build() async {
Future<SmtpServer> build() async {
final settings = ref.watch(SettingsController.provider)!;
final account = MailAccount.fromManualSettings(
email: settings.email,
userName: settings.userName ?? "",
outgoingClientDomain: settings.mailDomain,
outgoingPort: settings.outgoingPort,
name: settings.mailName,
incomingHost: settings.mailDomain,
outgoingHost: settings.mailDomain,
return SmtpServer(
settings.mailDomain,
username: settings.mailUsername,
password: (await File(settings.smtpPasswordFile).readAsString()).trim(),
);
return MailClient(account);
}
Future<void> sendMessage({
Future<void> send({
required String plainText,
required String markdown,
required String subject,
required MailAddress to,
required String to,
}) async {
final client = await future;
final server = await future;
final settings = ref.watch(SettingsController.provider)!;
await client.connect();
await client.sendMessageBuilder(
MessageBuilder.prepareMultipartAlternativeMessage(
plainText: plainText,
htmlText: markdownToHtml(markdown),
)
await mailer.send(
Message()
..from = settings.email
..recipients = [to]
..subject = subject
..from = [
MailAddress(settings.mailName, settings.emailAlias ?? settings.email),
]
..to = [to],
sentMailbox: await client.selectMailboxByFlag(MailboxFlag.sent),
..html = markdownToHtml(markdown)
..text = plainText,
server,
);
await client.disconnect();
}
static final provider =
AutoDisposeAsyncNotifierProvider<MailClientController, MailClient>(
AutoDisposeAsyncNotifierProvider<MailClientController, SmtpServer>(
MailClientController.new,
);
}
// # email-void smtp.us-east-1.void amazonaws.com
// # TLS
// # 587
// # ses-smtp-user
// #
// # BFRVr5CH56l5Zdfpfm9hki2r35NIhyY7fnZNsmxAZZpI