complete static method
Tries to complete the specified partialAccount information.
This is useful when mail configuration settings cannot be discovered automatically and the user only provides some information such as the host domains of the incoming and outgoing servers. Warning: this method assumes that the host domain has been specified by the user and contains a corresponding assert statement.
Implementation
static Future<MailAccount?> complete(
MailAccount partialAccount, {
bool isLogEnabled = false,
}) async {
final incoming = partialAccount.incoming.serverConfig;
assert(
partialAccount.email.isNotEmpty, 'MailAccount requires email address');
assert(incoming.hostname.isNotEmpty,
'MailAccount required incoming server host to be specified');
final outgoing = partialAccount.outgoing.serverConfig;
assert(outgoing.hostname.isNotEmpty,
'MailAccount required outgoing server host to be specified');
final infos = <DiscoverConnectionInfo>[];
if (incoming.port == 0 ||
incoming.socketType == SocketType.unknown ||
incoming.type == ServerType.unknown) {
DiscoverHelper.addIncomingVariations(incoming.hostname, infos);
}
if (outgoing.port == 0 ||
outgoing.socketType == SocketType.unknown ||
outgoing.type == ServerType.unknown) {
DiscoverHelper.addOutgoingVariations(outgoing.hostname, infos);
}
if (infos.isNotEmpty) {
final baseDomain =
DiscoverHelper.getDomainFromEmail(partialAccount.email);
final clientConfig = await DiscoverHelper.discoverFromConnections(
baseDomain,
infos,
isLogEnabled: isLogEnabled,
);
if (clientConfig == null) {
_log(
'Unable to discover remaining settings from $partialAccount',
isLogEnabled,
);
return null;
}
return partialAccount.copyWith(
incoming: partialAccount.incoming.copyWith(
serverConfig: clientConfig.preferredIncomingServer,
),
outgoing: partialAccount.outgoing.copyWith(
serverConfig: clientConfig.preferredOutgoingServer,
),
);
}
return null;
}