use of jakarta.mail.Flags in project exist by eXist-db.
the class MessageListFunctions method getMessageListAsXML.
private Sequence getMessageListAsXML(Sequence[] args, Sequence contextSequence) throws XPathException {
Message[] msgList;
Sequence ret = Sequence.EMPTY_SEQUENCE;
// was a msgList handle specified?
if (args[0].isEmpty()) {
throw (new XPathException(this, "Message List handle not specified"));
}
// get the MessageList
long msgListHandle = ((IntegerValue) args[0].itemAt(0)).getLong();
msgList = MailModule.retrieveMessageList(context, msgListHandle);
if (msgList == null) {
throw (new XPathException(this, "Invalid Message List handle specified"));
}
if (msgList.length > 0) {
boolean includeHeaders = args[1].effectiveBooleanValue();
context.pushDocumentContext();
try {
MemTreeBuilder builder = context.getDocumentBuilder();
builder.startDocument();
builder.startElement(new QName("messages", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("count", null, null), String.valueOf(msgList.length));
try {
for (Message message : msgList) {
builder.startElement(new QName("message", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("number", null, null), String.valueOf(message.getMessageNumber()));
// Sent Date
if (message.getSentDate() != null) {
builder.startElement(new QName("sent", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.characters(formatDate(message.getSentDate()));
builder.endElement();
}
// Received Date
if (message.getReceivedDate() != null) {
builder.startElement(new QName("received", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.characters(formatDate(message.getReceivedDate()));
builder.endElement();
}
// From
if (message.getFrom() != null) {
builder.startElement(new QName("from", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.characters(message.getFrom()[0].toString());
builder.endElement();
}
// Recipients
builder.startElement(new QName("recipients", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
// To Recipients
Address[] toAddresses = message.getRecipients(Message.RecipientType.TO);
if (toAddresses != null) {
for (Address to : toAddresses) {
builder.startElement(new QName("recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "to");
builder.characters(to.toString());
builder.endElement();
}
}
// cc Recipients
Address[] ccAddresses = message.getRecipients(Message.RecipientType.CC);
if (ccAddresses != null) {
for (Address ccAddress : ccAddresses) {
builder.startElement(new QName("recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "cc");
builder.characters(ccAddress.toString());
builder.endElement();
}
}
// bcc Recipients
Address[] bccAddresses = message.getRecipients(Message.RecipientType.BCC);
if (bccAddresses != null) {
for (Address bccAddress : bccAddresses) {
builder.startElement(new QName("recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "bcc");
builder.characters(bccAddress.toString());
builder.endElement();
}
}
builder.endElement();
// Flags
Flags flags = message.getFlags();
Flags.Flag[] systemFlags = flags.getSystemFlags();
String[] userFlags = flags.getUserFlags();
if (systemFlags.length > 0 || userFlags.length > 0) {
builder.startElement(new QName("flags", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
for (Flags.Flag systemFlag : systemFlags) {
if (systemFlag == Flags.Flag.ANSWERED) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "answered");
builder.endElement();
} else if (systemFlag == Flags.Flag.DELETED) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "deleted");
builder.endElement();
} else if (systemFlag == Flags.Flag.DRAFT) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "draft");
builder.endElement();
} else if (systemFlag == Flags.Flag.FLAGGED) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "flagged");
builder.endElement();
} else if (systemFlag == Flags.Flag.RECENT) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "recent");
builder.endElement();
} else if (systemFlag == Flags.Flag.SEEN) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "seen");
builder.endElement();
}
}
for (String userFlag : userFlags) {
builder.startElement(new QName("flag", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("type", null, null), "user");
builder.addAttribute(new QName("value", null, null), userFlag);
builder.endElement();
}
builder.endElement();
}
if (includeHeaders) {
Enumeration headers = message.getAllHeaders();
if (headers.hasMoreElements()) {
builder.startElement(new QName("headers", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
while (headers.hasMoreElements()) {
Header header = (Header) headers.nextElement();
builder.startElement(new QName("header", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.addAttribute(new QName("name", null, null), header.getName());
builder.addAttribute(new QName("value", null, null), header.getValue());
builder.endElement();
}
builder.endElement();
}
}
// Subject
builder.startElement(new QName("subject", MailModule.NAMESPACE_URI, MailModule.PREFIX), null);
builder.characters(message.getSubject());
builder.endElement();
builder.endElement();
}
} catch (MessagingException me) {
throw (new XPathException(this, "Failed to retrieve messages from list", me));
}
builder.endElement();
ret = (NodeValue) builder.getDocument().getDocumentElement();
} finally {
context.popDocumentContext();
}
}
return (ret);
}
use of jakarta.mail.Flags in project exist by eXist-db.
the class MessageListFunctions method parseFlagTerm.
private SearchTerm parseFlagTerm(Node terms) throws XPathException {
SearchTerm st = null;
String flag = ((Element) terms).getAttribute("flag");
String value = ((Element) terms).getAttribute("value");
if (StringUtils.isEmpty(value)) {
throw (new XPathException(this, "value not specified for term with type: " + ((Element) terms).getAttribute("type")));
}
if (flag != null && !flag.isEmpty()) {
Flags flags = null;
if (flag.equalsIgnoreCase("answered")) {
flags = new Flags(Flags.Flag.ANSWERED);
} else if (flag.equalsIgnoreCase("deleted")) {
flags = new Flags(Flags.Flag.DELETED);
} else if (flag.equalsIgnoreCase("draft")) {
flags = new Flags(Flags.Flag.DRAFT);
} else if (flag.equalsIgnoreCase("recent")) {
flags = new Flags(Flags.Flag.RECENT);
} else if (flag.equalsIgnoreCase("seen")) {
flags = new Flags(Flags.Flag.SEEN);
} else {
throw (new XPathException(this, "Invalid flag: " + flag + ", for term with type: " + ((Element) terms).getAttribute("type")));
}
st = new FlagTerm(flags, value.equalsIgnoreCase("true"));
} else {
throw (new XPathException(this, "flag attribute must be specified for term with type: " + ((Element) terms).getAttribute("type")));
}
return (st);
}
use of jakarta.mail.Flags in project spring-integration by spring-projects.
the class AbstractMailReceiver method setMessageFlags.
private void setMessageFlags(Message[] filteredMessages) throws MessagingException {
boolean recentFlagSupported = false;
Flags flags = getFolder().getPermanentFlags();
if (flags != null) {
recentFlagSupported = flags.contains(Flags.Flag.RECENT);
}
for (Message message : filteredMessages) {
if (!recentFlagSupported) {
if (flags != null && flags.contains(Flags.Flag.USER)) {
this.logger.debug(() -> "USER flags are supported by this mail server. Flagging message with '" + this.userFlag + "' user flag");
Flags siFlags = new Flags();
siFlags.add(this.userFlag);
message.setFlags(siFlags, true);
} else {
this.logger.debug("USER flags are not supported by this mail server. " + "Flagging message with system flag");
message.setFlag(Flags.Flag.FLAGGED, true);
}
}
setAdditionalFlags(message);
}
}
use of jakarta.mail.Flags in project spring-integration by spring-projects.
the class ImapMailReceiverTests method testImapLifecycleForRaceCondition.
// see INT-1801
@Test
public void testImapLifecycleForRaceCondition() throws Exception {
for (int i = 0; i < 100; i++) {
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
Store store = mock(Store.class);
Folder folder = mock(Folder.class);
given(folder.exists()).willReturn(true);
given(folder.isOpen()).willReturn(true);
given(folder.search(Mockito.any())).willReturn(new Message[] {});
given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
DirectFieldAccessor df = new DirectFieldAccessor(receiver);
df.setPropertyValue("store", store);
receiver.setBeanFactory(mock(BeanFactory.class));
receiver.afterPropertiesSet();
new Thread(() -> {
try {
receiver.receive();
} catch (jakarta.mail.MessagingException e) {
if (e.getCause() instanceof NullPointerException) {
failed.getAndIncrement();
}
}
}).start();
new Thread(() -> {
try {
receiver.destroy();
} catch (Exception ignore) {
// ignore
}
}).start();
}
assertThat(failed.get()).isEqualTo(0);
}
use of jakarta.mail.Flags in project spring-integration by spring-projects.
the class ImapMailReceiverTests method testNoInitialIdleDelayWhenRecentNotSupported.
@SuppressWarnings("resource")
@Test
public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception {
ImapIdleChannelAdapter adapter = this.context.getBean("simpleAdapter", ImapIdleChannelAdapter.class);
QueueChannel channel = new QueueChannel();
adapter.setOutputChannel(channel);
adapter.setReconnectDelay(1);
ImapMailReceiver receiver = new ImapMailReceiver("imap:foo");
receiver = spy(receiver);
receiver.setBeanFactory(mock(BeanFactory.class));
receiver.afterPropertiesSet();
final IMAPFolder folder = mock(IMAPFolder.class);
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
given(folder.isOpen()).willReturn(false).willReturn(true);
given(folder.exists()).willReturn(true);
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
adapterAccessor.setPropertyValue("mailReceiver", receiver);
Field storeField = AbstractMailReceiver.class.getDeclaredField("store");
storeField.setAccessible(true);
Store store = mock(Store.class);
given(store.isConnected()).willReturn(true);
given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
storeField.set(receiver, store);
willAnswer(invocation -> folder).given(receiver).getFolder();
MimeMessage mailMessage = mock(MimeMessage.class);
Flags flags = mock(Flags.class);
given(mailMessage.getFlags()).willReturn(flags);
final Message[] messages = new Message[] { mailMessage };
final AtomicInteger shouldFindMessagesCounter = new AtomicInteger(2);
willAnswer(invocation -> {
/*
* Return the message from first invocation of waitForMessages()
* and in receive(); then return false in the next call to
* waitForMessages() so we enter idle(); counter will be reset
* to 1 in the mocked idle().
*/
if (shouldFindMessagesCounter.decrementAndGet() >= 0) {
return messages;
} else {
return new Message[0];
}
}).given(receiver).searchForNewMessages();
willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
willAnswer(invocation -> {
Thread.sleep(300);
shouldFindMessagesCounter.set(1);
return null;
}).given(folder).idle(true);
adapter.start();
/*
* Idle takes 5 seconds; if all is well, we should receive the first message
* before then.
*/
assertThat(channel.receive(3000)).isNotNull();
// We should not receive any more until the next idle elapses
assertThat(channel.receive(100)).isNull();
assertThat(channel.receive(6000)).isNotNull();
adapter.stop();
}
Aggregations