diff --git a/src/config.rs b/src/config.rs index a0ef749ff..2e4afd6a6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -65,6 +65,14 @@ pub enum Config { #[strum(props(default = "0"))] KeyGenType, + /// Timer in seconds after which the message is deleted from the + /// server. + /// + /// Equals to -1 by default, which means the message is never + /// deleted. + #[strum(props(default = "-1"))] + DeleteServerAfter, + SaveMimeHeaders, ConfiguredAddr, ConfiguredMailServer, diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 7bff625ae..d6f62bb0b 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -192,7 +192,6 @@ pub fn dc_receive_imf( }; } - // if we delete we don't need to try moving messages if needs_delete_job && !created_db_entries.is_empty() { for db_entry in &created_db_entries { job_add( @@ -204,7 +203,29 @@ pub fn dc_receive_imf( ); } } else { - context.do_heuristics_moves(server_folder.as_ref(), insert_msg_id); + // Get user-configured server deletion + let delete_server_after = context.get_config_int(Config::DeleteServerAfter); + + if delete_server_after != 0 { + // Move message if we don't delete it immediately. + context.do_heuristics_moves(server_folder.as_ref(), insert_msg_id); + } + + if delete_server_after >= 0 { + info!( + context, + "Scheduling message deletion in {} seconds", delete_server_after + ); + for db_entry in &created_db_entries { + job_add( + context, + Action::DeleteMsgOnImap, + db_entry.1.to_u32() as i32, + Params::new(), + delete_server_after as i64, + ); + } + } } info!(