Skip to content

Commit 8156692

Browse files
Alexander Krotovlink2xt
Alexander Krotov
authored and
link2xt
committed
configure: always try at least one IMAP and SMTP server
Previously empty autoconfig resulted in no servers being tried and no error displayed.
1 parent 5a9a4db commit 8156692

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/configure/mod.rs

+29-23
Original file line numberDiff line numberDiff line change
@@ -217,28 +217,32 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> {
217217

218218
progress!(ctx, 500);
219219

220-
let servers = expand_param_vector(
221-
param_autoconfig.unwrap_or_else(|| {
222-
vec![
223-
ServerParams {
224-
protocol: Protocol::IMAP,
225-
hostname: param.imap.server.clone(),
226-
port: param.imap.port,
227-
socket: param.imap.security,
228-
username: param.imap.user.clone(),
229-
},
230-
ServerParams {
231-
protocol: Protocol::SMTP,
232-
hostname: param.smtp.server.clone(),
233-
port: param.smtp.port,
234-
socket: param.smtp.security,
235-
username: param.smtp.user.clone(),
236-
},
237-
]
238-
}),
239-
&param.addr,
240-
&param_domain,
241-
);
220+
let mut servers = param_autoconfig.unwrap_or_default();
221+
if !servers
222+
.iter()
223+
.any(|server| server.protocol == Protocol::IMAP)
224+
{
225+
servers.push(ServerParams {
226+
protocol: Protocol::IMAP,
227+
hostname: param.imap.server.clone(),
228+
port: param.imap.port,
229+
socket: param.imap.security,
230+
username: param.imap.user.clone(),
231+
})
232+
}
233+
if !servers
234+
.iter()
235+
.any(|server| server.protocol == Protocol::SMTP)
236+
{
237+
servers.push(ServerParams {
238+
protocol: Protocol::SMTP,
239+
hostname: param.smtp.server.clone(),
240+
port: param.smtp.port,
241+
socket: param.smtp.security,
242+
username: param.smtp.user.clone(),
243+
})
244+
}
245+
let servers = expand_param_vector(servers, &param.addr, &param_domain);
242246

243247
progress!(ctx, 550);
244248

@@ -560,7 +564,9 @@ async fn nicer_configuration_error(context: &Context, errors: Vec<ConfigurationE
560564
let first_err = if let Some(f) = errors.first() {
561565
f
562566
} else {
563-
return "".to_string();
567+
// This means configuration failed but no errors have been captured. This should never
568+
// happen, but if it does, the user will see classic "Error: no error".
569+
return "no error".to_string();
564570
};
565571

566572
if errors

0 commit comments

Comments
 (0)