diff --git a/src/configure.rs b/src/configure.rs index 4350f08f6..565169470 100644 --- a/src/configure.rs +++ b/src/configure.rs @@ -249,7 +249,7 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> { } } }, - strict_tls: Some(provider.strict_tls), + strict_tls: Some(provider.opt.strict_tls), }) .collect(); @@ -338,7 +338,7 @@ async fn configure(ctx: &Context, param: &mut LoginParam) -> Result<()> { .collect(); let provider_strict_tls = param .provider - .map_or(socks5_config.is_some(), |provider| provider.strict_tls); + .map_or(socks5_config.is_some(), |provider| provider.opt.strict_tls); let smtp_config_task = task::spawn(async move { let mut smtp_configured = false; diff --git a/src/imap.rs b/src/imap.rs index 5cdecae9b..df4ed807e 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -274,7 +274,7 @@ impl Imap { param .provider .map_or(param.socks5_config.is_some(), |provider| { - provider.strict_tls + provider.opt.strict_tls }), idle_interrupt_receiver, )?; diff --git a/src/provider.rs b/src/provider.rs index b461e600c..2d37b1347 100644 --- a/src/provider.rs +++ b/src/provider.rs @@ -129,13 +129,6 @@ pub struct Provider { /// Default configuration values to set when provider is configured. pub config_defaults: Option>, - /// True if provider is known to use use proper, - /// not self-signed certificates. - pub strict_tls: bool, - - /// Maximum number of recipients the provider allows to send a single email to. - pub max_smtp_rcpt_to: Option, - /// Type of OAuth 2 authorization if provider supports it. pub oauth2_authorizer: Option, @@ -144,12 +137,29 @@ pub struct Provider { } /// Provider options with good defaults. -#[derive(Debug, Default, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq)] pub struct ProviderOptions { + /// True if provider is known to use use proper, + /// not self-signed certificates. + pub strict_tls: bool, + + /// Maximum number of recipients the provider allows to send a single email to. + pub max_smtp_rcpt_to: Option, + /// Move messages to the Trash folder instead of marking them "\Deleted". pub delete_to_trash: bool, } +impl Default for ProviderOptions { + fn default() -> Self { + Self { + strict_tls: true, + max_smtp_rcpt_to: None, + delete_to_trash: false, + } + } +} + /// Get resolver to query MX records. /// /// We first try to read the system's resolver from `/etc/resolv.conf`. diff --git a/src/provider/data.rs b/src/provider/data.rs index 49a0d30a9..673c2b815 100644 --- a/src/provider/data.rs +++ b/src/provider/data.rs @@ -35,8 +35,6 @@ static P_163: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -65,8 +63,6 @@ static P_AKTIVIX_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -84,8 +80,6 @@ static P_AOL: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "smtp.aol.com", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -115,8 +109,6 @@ static P_ARCOR_DE: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -145,8 +137,6 @@ static P_AUTISTICI_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -175,8 +165,6 @@ static P_BLINDZELN_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -205,8 +193,6 @@ static P_BLUEWIN_CH: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -235,8 +221,6 @@ static P_BUZON_UY: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -265,8 +249,6 @@ static P_CHELLO_AT: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -280,8 +262,6 @@ static P_COMCAST: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/comcast", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -295,8 +275,6 @@ static P_DISMAIL_DE: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/dismail-de", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -325,8 +303,6 @@ static P_DISROOT: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -355,8 +331,6 @@ static P_E_EMAIL: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -370,8 +344,6 @@ static P_ESPIV_NET: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/espiv-net", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -389,8 +361,6 @@ static P_EXAMPLE_COM: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Starttls, hostname: "smtp.example.com", port: 1337, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -421,8 +391,6 @@ static P_FASTMAIL: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -438,8 +406,6 @@ static P_FIREMAIL_DE: Lazy = Lazy::new(|| { server: vec![ ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -467,8 +433,6 @@ static P_FIVE_CHAT: Lazy = Lazy::new(|| Provider { value: "0", }, ]), - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -486,8 +450,6 @@ static P_FREENET_DE: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Starttls, hostname: "mx.freenet.de", port: 587, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -506,11 +468,10 @@ static P_GMAIL: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "smtp.gmail.com", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: Some(Oauth2Authorizer::Gmail), opt: ProviderOptions { delete_to_trash: true, + ..Default::default() }, } }); @@ -546,8 +507,6 @@ static P_GMX_NET: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -574,10 +533,11 @@ static P_HERMES_RADIO: Lazy = Lazy::new(|| Provider { value: "2", }, ]), - strict_tls: false, - max_smtp_rcpt_to: None, oauth2_authorizer: None, - opt: Default::default(), + opt: ProviderOptions { + strict_tls: false, + ..Default::default() + }, }); // hey.com.md: hey.com @@ -591,8 +551,6 @@ static P_HEY_COM: Lazy = Lazy::new(|| { server: vec![ ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -607,8 +565,6 @@ static P_I_UA: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/i-ua", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -622,8 +578,6 @@ static P_I3_NET: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/i3-net", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -652,8 +606,6 @@ static P_ICLOUD: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -682,10 +634,11 @@ static P_INFOMANIAK_COM: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: Some(10), oauth2_authorizer: None, - opt: Default::default(), + opt: ProviderOptions { + max_smtp_rcpt_to: Some(10), + ..Default::default() + }, }); // kolst.com.md: kolst.com @@ -697,8 +650,6 @@ static P_KOLST_COM: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/kolst-com", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -712,8 +663,6 @@ static P_KONTENT_COM: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/kontent-com", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -742,8 +691,6 @@ static P_MAIL_DE: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -761,8 +708,6 @@ static P_MAIL_RU: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "smtp.mail.ru", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -792,8 +737,6 @@ static P_MAIL2TOR: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -822,8 +765,6 @@ static P_MAILBOX_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -852,8 +793,6 @@ static P_MAILO_COM: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -907,10 +846,12 @@ static P_NAUTA_CU: Lazy = Lazy::new(|| Provider { value: "0", }, ]), - strict_tls: false, - max_smtp_rcpt_to: Some(20), oauth2_authorizer: None, - opt: Default::default(), + opt: ProviderOptions { + strict_tls: false, + max_smtp_rcpt_to: Some(20), + ..Default::default() + }, }); // naver.md: naver.com @@ -937,8 +878,6 @@ static P_NAVER: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -967,8 +906,6 @@ static P_NUBO_COOP: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -997,8 +934,6 @@ static P_OUTLOOK_COM: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1027,8 +962,6 @@ static P_OUVATON_COOP: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1057,8 +990,6 @@ static P_POSTEO: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1074,8 +1005,6 @@ static P_PROTONMAIL: Lazy = Lazy::new(|| { server: vec![ ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1094,8 +1023,6 @@ static P_QQ: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "smtp.qq.com", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1125,8 +1052,6 @@ static P_RISEUP_NET: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1140,8 +1065,6 @@ static P_ROGERS_COM: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/rogers-com", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1170,8 +1093,6 @@ static P_SYSTEMAUSFALL_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1200,8 +1121,6 @@ static P_SYSTEMLI_ORG: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1219,8 +1138,6 @@ static P_T_ONLINE: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "securesmtp.t-online.de", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1270,8 +1187,6 @@ static P_TESTRUN: Lazy = Lazy::new(|| Provider { value: "0", }, ]), - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1300,8 +1215,6 @@ static P_TISCALI_IT: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1317,8 +1230,6 @@ static P_TUTANOTA: Lazy = Lazy::new(|| { server: vec![ ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1333,8 +1244,6 @@ static P_UKR_NET: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/ukr-net", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1363,8 +1272,6 @@ static P_UNDERNET_UY: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1378,8 +1285,6 @@ static P_VFEMAIL: Lazy = Lazy::new(|| Provider { overview_page: "https://providers.delta.chat/vfemail", server: vec![], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1408,8 +1313,6 @@ static P_VIVALDI: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1438,8 +1341,6 @@ static P_VODAFONE_DE: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1458,8 +1359,6 @@ static P_WEB_DE: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Starttls, hostname: "smtp.web.de", port: 587, username_pattern: Emaillocalpart }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1478,8 +1377,6 @@ static P_YAHOO: Lazy = Lazy::new(|| { Server { protocol: Smtp, socket: Ssl, hostname: "smtp.mail.yahoo.com", port: 465, username_pattern: Email }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1509,8 +1406,6 @@ static P_YANDEX_RU: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: Some(Oauth2Authorizer::Yandex), opt: Default::default(), }); @@ -1530,8 +1425,6 @@ static P_YGGMAIL: Lazy = Lazy::new(|| { config_defaults: Some(vec![ ConfigDefault { key: Config::MvboxMove, value: "0" }, ]), - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), } @@ -1561,8 +1454,6 @@ static P_ZIGGO_NL: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); @@ -1591,8 +1482,6 @@ static P_ZOHO: Lazy = Lazy::new(|| Provider { }, ], config_defaults: None, - strict_tls: true, - max_smtp_rcpt_to: None, oauth2_authorizer: None, opt: Default::default(), }); diff --git a/src/smtp.rs b/src/smtp.rs index 5cf0dd73f..cda3aff05 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -101,8 +101,9 @@ impl Smtp { &lp.smtp, &lp.socks5_config, &lp.addr, - lp.provider - .map_or(lp.socks5_config.is_some(), |provider| provider.strict_tls), + lp.provider.map_or(lp.socks5_config.is_some(), |provider| { + provider.opt.strict_tls + }), ) .await } diff --git a/src/smtp/send.rs b/src/smtp/send.rs index 3cd5c0567..938deb5fc 100644 --- a/src/smtp/send.rs +++ b/src/smtp/send.rs @@ -47,7 +47,7 @@ impl Smtp { let chunk_size = context .get_configured_provider() .await? - .and_then(|provider| provider.max_smtp_rcpt_to) + .and_then(|provider| provider.opt.max_smtp_rcpt_to) .map_or(DEFAULT_MAX_SMTP_RCPT_TO, usize::from); for recipients_chunk in recipients.chunks(chunk_size) {