Message message = messageDAO.getParsed(mailbox, messageId); result.put("message", message); messageDAO.modify(mailbox, messageId, new MessageModification.Builder().addMarker(Marker.SEEN).build()); List<UUID> ids = messageDAO.getMessageIds(mailbox, labelId, messageId, 2, true); if (ids.size() == 2) { result.put("next", ids.get(1)); ids = messageDAO.getMessageIds(mailbox, labelId, messageId, 2, false); if (ids.size() == 2) { result.put("prev", ids.get(1));
response = JSONUtils.fromObject(messageDAO.getMessageIdsWithMetadata(mailbox, labelId, start, count, reverse, includeBody)); } else { response = JSONUtils.fromObject(messageDAO.getMessageIds(mailbox, labelId, start, count, reverse));
@Override public InputStream getMessage(String uid) throws IOException { UUID uuid = Base64UUIDUtils.decode(uid); logger.debug("POP3: Get message {}/{} [{}]", mailbox, uuid, uid); try { InputStream is = dao.getRaw(mailbox, uuid).getUncompressedInputStream(); return new CRLFInputStream(is); } catch (Exception e) { logger.error("Error occured while retreiving POP3 message " + mailbox + "/" + uuid + " :", e); throw new IOException("Unable to read message"); } }
@Override public void remove(String... uids) throws IOException { logger.debug("POP3: Removing messages {} from {}", uids, mailbox); Set<Integer> labels = new HashSet<Integer>(1); labels.add(ReservedLabels.POP3.getId()); List<UUID> uuids = new ArrayList<UUID>(uids.length); for (String uid : uids) { uuids.add(Base64UUIDUtils.decode(uid)); } dao.modify(mailbox, uuids, new MessageModification.Builder().removeLabels(labels).build()); }
/** * Purge deleted messages older than given date * * @param account * @param age * @return */ @PUT @Path("purge") @Produces(MediaType.APPLICATION_JSON) public Response purge( @PathParam("user") final String user, @PathParam("domain") final String domain, @QueryParam("age") Date age) { Mailbox mailbox = new Mailbox(user, domain); // set date to now if not given (purges all messages) if (age == null) age = new Date(); try { messageDAO.purge(mailbox, age); } catch (Exception e) { logger.error("Failed to purge messages:", e); throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR); } return Response.noContent().build(); }
messageDAO.put(mailbox, messageId, message, in); in.close(); } catch (MimeParserException mpe) {
/** * Initialise a list of messages visible for the current session * * @return List of messages */ private List<MessageMetaData> getPOP3MessageList() { // get list of messages Map<UUID, Message> messages = dao.getMessageIdsWithMetadata( mailbox, ReservedLabels.POP3.getId(), null, MAX_POP3_SESSION_MESSAGES, true, false); // convert to James Protocols list List<MessageMetaData> list = new ArrayList<MessageMetaData>(messages.size()); for (Map.Entry<UUID, Message> entry : messages.entrySet()) { MessageMetaData md = new MessageMetaData( Base64UUIDUtils.encode(entry.getKey()), entry.getValue().getSize()); list.add(md); } return list; }
/** * Scrub mailbox and recalculate counters * * @param account * @return */ @POST @Path("counters") @Produces(MediaType.APPLICATION_JSON) public Response scrubCounters( @PathParam("user") final String user, @PathParam("domain") final String domain) { Mailbox mailbox = new Mailbox(user, domain); LabelMap calculatedCounters = messageDAO.scrub(mailbox, false); labelDAO.setCounters(mailbox, calculatedCounters); return Response.noContent().build(); }
/** * Delete message * * @param account * @param messageId * @return */ @DELETE @Produces(MediaType.APPLICATION_JSON) public Response deleteMessage( @PathParam("user") final String user, @PathParam("domain") final String domain, @PathParam("messageid") UUID messageId) { Mailbox mailbox = new Mailbox(user, domain); try { messageDAO.delete(mailbox, messageId); } catch (Exception e) { logger.warn("Internal Server Error: ", e); throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR); } return Response.noContent().build(); }
/** * Redirect to original message blob URI * * @param account * @param messageId * @return */ @GET @Path("url") public Response getMessageUrl( @PathParam("user") final String user, @PathParam("domain") final String domain, @PathParam("messageid") final UUID messageId) { Mailbox mailbox = new Mailbox(user, domain); URI uri = null; try { Message message = messageDAO.getParsed(mailbox, messageId); uri = message.getLocation(); Assert.notNull(uri, "No source message"); } catch (IllegalArgumentException iae) { throw new BadRequestException(iae.getMessage()); } catch (Exception e) { logger.warn("Internal Server Error: ", e); throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR); } return Response.temporaryRedirect(uri).build(); }
.build(); messageDAO.modify(mailbox, messageId, modification); } catch (IllegalLabelException ile) { throw new BadRequestException(ile.getMessage());
messageDAO.purge(mailbox, new Date());
messageDAO.put(mailbox, messageId, message, env.getMessageInputStream());
/** * Scrub mailbox, rebuild indexes and recalculate counters * * @param account * @return */ @POST @Path("indexes") @Produces(MediaType.APPLICATION_JSON) public Response scrubIndexes( @PathParam("user") final String user, @PathParam("domain") final String domain) { Mailbox mailbox = new Mailbox(user, domain); LabelMap calculatedCounters = messageDAO.scrub(mailbox, true); labelDAO.setCounters(mailbox, calculatedCounters); return Response.noContent().build(); }
messageDAO.delete(mailbox, depdupeMessageIds); } catch (Exception e) { logger.error("Message deletion failed: ", e);
.build(); messageDAO.modify(mailbox, depdupeMessageIds, modification); } catch (IllegalLabelException ile) { throw new BadRequestException(ile.getMessage());
BlobDataSource blobDS = messageDAO.getRaw(mailbox, messageId);
messageDAO.modify(mailbox, messageIds, new MessageModification.Builder().removeLabels(labelIds).build());
rawIn = messageDAO.getRaw(mailbox, messageId).getUncompressedInputStream(); MimeParser mimeParser = new MimeParser(); mimeParser.parse(rawIn);