diff --git a/src/mimefactory.rs b/src/mimefactory.rs index 82f9823faf..e6500f2f1e 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -862,12 +862,12 @@ impl MimeFactory { pub async fn from_mdn( context: &Context, + from_addr: &str, from_id: ContactId, rfc724_mid: String, additional_msg_ids: Vec, ) -> Result { let contact = Contact::get_by_id(context, from_id).await?; - let from_addr = context.get_primary_self_addr().await?; let timestamp = time(); let addr = contact.get_addr().to_string(); @@ -890,7 +890,7 @@ impl MimeFactory { }; let res = MimeFactory { - from_addr, + from_addr: from_addr.to_string(), from_displayname: "".to_string(), sender_displayname: None, selfstatus: "".to_string(), diff --git a/src/mimefactory/mimefactory_tests.rs b/src/mimefactory/mimefactory_tests.rs index 9420f2c385..77d1f91edf 100644 --- a/src/mimefactory/mimefactory_tests.rs +++ b/src/mimefactory/mimefactory_tests.rs @@ -290,6 +290,7 @@ async fn test_mdn_create_encrypted() -> Result<()> { .set_config(Config::Displayname, Some("Alice Exampleorg")) .await?; let bob = tcm.bob().await; + let bob_addr = bob.get_primary_self_addr().await?; bob.allow_unencrypted().await?; bob.set_config(Config::Displayname, Some("Bob Examplenet")) .await?; @@ -304,10 +305,15 @@ async fn test_mdn_create_encrypted() -> Result<()> { let rcvd = bob.recv_msg(&sent).await; message::markseen_msgs(&bob, vec![rcvd.id]).await?; - let mimefactory = - MimeFactory::from_mdn(&bob, rcvd.from_id, rcvd.rfc724_mid.clone(), vec![]).await?; + let mimefactory = MimeFactory::from_mdn( + &bob, + &bob_addr, + rcvd.from_id, + rcvd.rfc724_mid.clone(), + vec![], + ) + .await?; assert!(!mimefactory.will_be_encrypted()); - let bob_addr = bob.get_primary_self_addr().await?; let rendered_msg = mimefactory.render(&bob, &bob_addr).await?; assert!(!rendered_msg.message.contains("Bob Examplenet")); @@ -319,7 +325,8 @@ async fn test_mdn_create_encrypted() -> Result<()> { let rcvd = tcm.send_recv(&alice, &bob, "Heyho").await; message::markseen_msgs(&bob, vec![rcvd.id]).await?; - let mimefactory = MimeFactory::from_mdn(&bob, rcvd.from_id, rcvd.rfc724_mid, vec![]).await?; + let mimefactory = + MimeFactory::from_mdn(&bob, &bob_addr, rcvd.from_id, rcvd.rfc724_mid, vec![]).await?; assert!(mimefactory.will_be_encrypted()); let bob_addr = bob.get_primary_self_addr().await?; let rendered_msg = mimefactory.render(&bob, &bob_addr).await?; @@ -349,7 +356,9 @@ async fn test_mdn_sent_to_all_relays() -> Result<()> { )?; import_public_key(alice, &bob_public_key).await?; - let mimefactory = MimeFactory::from_mdn(alice, rcvd.from_id, rcvd.rfc724_mid, vec![]).await?; + let alice_addr = alice.get_primary_self_addr().await?; + let mimefactory = + MimeFactory::from_mdn(alice, &alice_addr, rcvd.from_id, rcvd.rfc724_mid, vec![]).await?; let mut recipients = mimefactory.recipients(); recipients.sort(); assert_eq!(recipients, vec!["bob@example.net", "bob@relay2.example"]); @@ -364,8 +373,9 @@ async fn test_mdn_autocrypt_throttle() -> Result<()> { alice: &TestContext, rcvd: &Message, ) -> Result { - let mf = MimeFactory::from_mdn(bob, rcvd.from_id, rcvd.rfc724_mid.clone(), vec![]).await?; let addr = bob.get_primary_self_addr().await?; + let mf = MimeFactory::from_mdn(bob, &addr, rcvd.from_id, rcvd.rfc724_mid.clone(), vec![]) + .await?; let rendered_msg = mf.render(bob, &addr).await?; let mime = MimeMessage::from_bytes(alice, rendered_msg.message.as_bytes()).await?; Ok(mime.autocrypt_fingerprint.is_some()) diff --git a/src/smtp.rs b/src/smtp.rs index 990e15203f..1b4d5466f6 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -687,8 +687,14 @@ async fn send_mdn_rfc724_mid( ) .await?; + let from = smtp + .from + .as_ref() + .context("No From address, not connected")? + .to_string(); let mimefactory = MimeFactory::from_mdn( context, + &from, contact_id, rfc724_mid.to_string(), additional_rfc724_mids.clone(), @@ -700,11 +706,6 @@ async fn send_mdn_rfc724_mid( } else { mimefactory.recipients() }; - let from = smtp - .from - .as_ref() - .context("No From address, not connected")? - .to_string(); let rendered_msg = Box::pin(mimefactory.render(context, &from)).await?; let body = rendered_msg.message; diff --git a/src/test_utils.rs b/src/test_utils.rs index 4572815709..5cb56b6580 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -852,7 +852,8 @@ ORDER BY id" /// Receives a read receipt from `reader`, who received `msg`. pub async fn recv_mdn(&self, reader: &TestContext, msg: &Message) -> Result<()> { - let mdn = MimeFactory::from_mdn(reader, msg.from_id, msg.rfc724_mid.clone(), vec![]) + let addr = reader.get_primary_self_addr().await?; + let mdn = MimeFactory::from_mdn(reader, &addr, msg.from_id, msg.rfc724_mid.clone(), vec![]) .await? .render(reader, &reader.get_primary_self_addr().await?) .await?