diff --git a/crates/jmap/src/email/import.rs b/crates/jmap/src/email/import.rs index 21c0029c..442e6b75 100644 --- a/crates/jmap/src/email/import.rs +++ b/crates/jmap/src/email/import.rs @@ -18,6 +18,7 @@ use jmap_proto::{ }; use mail_parser::MessageParser; use std::future::Future; +use trc::AddContext; use utils::map::vec_map::VecMap; pub trait EmailImport: Sync + Send { @@ -46,6 +47,16 @@ impl EmailImport for Server { None }; + // Obtain import access token + let import_access_token = if account_id != access_token.primary_id() { + self.get_access_token(account_id) + .await + .caused_by(trc::location!())? + .into() + } else { + None + }; + let mut response = ImportEmailResponse { account_id: request.account_id, new_state: old_state.clone(), @@ -114,7 +125,7 @@ impl EmailImport for Server { .email_ingest(IngestEmail { raw_message: &raw_message, message: MessageParser::new().parse(&raw_message), - access_token, + access_token: import_access_token.as_deref().unwrap_or(access_token), mailbox_ids, keywords: email.keywords, received_at: email.received_at.map(|r| r.into()), diff --git a/crates/jmap/src/email/set.rs b/crates/jmap/src/email/set.rs index ad799980..2f17e534 100644 --- a/crates/jmap/src/email/set.rs +++ b/crates/jmap/src/email/set.rs @@ -84,6 +84,16 @@ impl EmailSet for Server { (None, None, None) }; + // Obtain import access token + let import_access_token = if account_id != access_token.primary_id() { + self.get_access_token(account_id) + .await + .caused_by(trc::location!())? + .into() + } else { + None + }; + let mut last_change_id = None; let will_destroy = request.unwrap_destroy(); @@ -703,7 +713,7 @@ impl EmailSet for Server { .email_ingest(IngestEmail { raw_message: &raw_message, message: MessageParser::new().parse(&raw_message), - access_token, + access_token: import_access_token.as_deref().unwrap_or(access_token), mailbox_ids: mailboxes, keywords, received_at,