diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index 2d0f3570d4ee7fcf03beb596d6da3f771cfc055d..6a52abb54e8da16fbd9798fcc5c4292f103690a6 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -127,7 +127,7 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve mailManager.delete(inMail, identity, true); } - Collection<DBMailLight> outbox = new HashSet<DBMailLight>(mailManager.getOutbox(identity, 0, 0)); + Collection<DBMailLight> outbox = new HashSet<DBMailLight>(mailManager.getOutbox(identity, 0, 0, false)); for(DBMailLight outMail:outbox) { mailManager.delete(outMail, identity, true); } diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManager.java b/src/main/java/org/olat/core/util/mail/manager/MailManager.java index e67bea37764d90bbdb64a8a3ef975444039ea498..c8628f7e6f108a65df94911d6c0385c40c1bdc4e 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManager.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManager.java @@ -467,13 +467,13 @@ public class MailManager extends BasicManager { * @param maxResults * @return */ - public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults) { + public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults, boolean fetchRecipients) { StringBuilder sb = new StringBuilder(); sb.append("select distinct(mail) from ").append(DBMailLightImpl.class.getName()).append(" mail") .append(" inner join fetch mail.from fromRecipient") .append(" inner join fromRecipient.recipient fromRecipientIdentity") - .append(" inner join mail.recipients recipient") - .append(" inner join recipient.recipient recipientIdentity") + .append(" inner join ").append(fetchRecipients ? "fetch" : "").append(" mail.recipients recipient") + .append(" inner join ").append(fetchRecipients ? "fetch" : "").append(" recipient.recipient recipientIdentity") .append(" where fromRecipientIdentity.key=:fromKey and fromRecipient.deleted=false and recipientIdentity.key!=:fromKey") .append(" order by mail.creationDate desc"); diff --git a/src/main/java/org/olat/core/util/mail/ui/MailListController.java b/src/main/java/org/olat/core/util/mail/ui/MailListController.java index c06efac08488c60da86716811b1be5788e1abd72..6a0ffb38abb43ac5348913812f834ac49775e260 100644 --- a/src/main/java/org/olat/core/util/mail/ui/MailListController.java +++ b/src/main/java/org/olat/core/util/mail/ui/MailListController.java @@ -233,7 +233,7 @@ public class MailListController extends BasicController implements Activateable2 if(StringHelper.containsNonWhitespace(metaId)) { mails = MailManager.getInstance().getEmailsByMetaId(metaId); } else { - mails = MailManager.getInstance().getOutbox(getIdentity(), 0, -1); + mails = MailManager.getInstance().getOutbox(getIdentity(), 0, -1, true); } //strip meta emails diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java index 742b9bf156ae8d6afdb1eda5ac4f4519c4f31db4..f2865454100467786c560f08130ce46e050c36a5 100644 --- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java +++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java @@ -115,14 +115,21 @@ public class MailManagerTest extends OlatTestCase { Assert.assertEquals(MailerResult.OK, result.getReturnCode()); dbInstance.commitAndCloseSession(); - //retrieve the inbox of toId - List<DBMailLight> sendedMails = mailManager.getOutbox(fromId, 0, -1); + //retrieve the outbox of toId (with lazy loading) + List<DBMailLight> sendedMails = mailManager.getOutbox(fromId, 0, -1, false); Assert.assertNotNull(sendedMails); Assert.assertEquals(1, sendedMails.size()); DBMailLight sendedMail = sendedMails.get(0); Assert.assertNotNull(sendedMail); Assert.assertEquals("Hello outbox", sendedMail.getSubject()); + + dbInstance.commitAndCloseSession(); + + //retrieve the outbox of toId (with fetch) + List<DBMailLight> sendedMailsWithFetch = mailManager.getOutbox(fromId, 0, -1, true); + Assert.assertNotNull(sendedMailsWithFetch); + Assert.assertEquals(1, sendedMailsWithFetch.size()); } @Test @@ -225,7 +232,7 @@ public class MailManagerTest extends OlatTestCase { List<DBMailLight> deletedMails_3 = mailManager.getInbox(toId_3, null, null, null, 0, -1); Assert.assertNotNull(deletedMails_3); Assert.assertTrue(deletedMails_3.isEmpty()); - List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1); + List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1, true); Assert.assertNotNull(deletedMails_4); Assert.assertTrue(deletedMails_4.isEmpty()); //check mail by meta id