@@ -217,28 +217,32 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> {
217
217
218
218
progress ! ( ctx, 500 ) ;
219
219
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) ;
242
246
243
247
progress ! ( ctx, 550 ) ;
244
248
@@ -560,7 +564,9 @@ async fn nicer_configuration_error(context: &Context, errors: Vec<ConfigurationE
560
564
let first_err = if let Some ( f) = errors. first ( ) {
561
565
f
562
566
} 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 ( ) ;
564
570
} ;
565
571
566
572
if errors
0 commit comments