new Message() .setRaw(mailMessageModel.getRawString()) .setLabelIds(importedLabelIds.build()); try { getOrCreateGmail(authData).users().messages().insert(USER, newMessage).execute();
try { getResponse = gmail.users().messages().get(USER, listMessage.getId()).setFormat("raw").execute(); } catch (IOException e) { return new ExportResult<>(e); results.add(new MailMessageModel(getResponse.getRaw(), getResponse.getLabelIds()));
private void markMessageAsRead(Message messageStub) throws IOException { ModifyMessageRequest modifyMessageRequest = new ModifyMessageRequest() .setRemoveLabelIds(Collections.singletonList("UNREAD")); service.users().messages().modify(username, messageStub.getId(), modifyMessageRequest).execute(); }
public static boolean sendMessage(String email, String subject, String text) { if (email.isEmpty()) { logger.info("Email is not sent because the address is empty"); return false; } try { Gmail gmail = new Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("XMage Server").build(); MimeMessage mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); mimeMessage.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(email)); mimeMessage.setSubject(subject); mimeMessage.setText(text); ByteArrayOutputStream baos = new ByteArrayOutputStream(); mimeMessage.writeTo(baos); Message message = new Message(); message.setRaw(Base64.encodeBase64URLSafeString(baos.toByteArray())); gmail.users().messages().send(ConfigSettings.instance.getGoogleAccount() + (ConfigSettings.instance.getGoogleAccount().endsWith("@gmail.com") ? "" : "@gmail.com"), message).execute(); return true; } catch (MessagingException | IOException ex) { logger.error("Error sending message", ex); } return false; } }
@Override public void onSuccess( Message responseMessage, HttpHeaders responseHeaders) throws IOException { Preconditions.checkState( message.getId().equals(responseMessage.getId()), "Message ids must be equal"); List<String> gmailMessageIds = responseMessage.getLabelIds() == null ? ImmutableList.of() : responseMessage.getLabelIds(); System.out.format("For message %s, got labels: %s\n", responseMessage.getId(), gmailMessageIds.stream() .map(id -> labelsById.getOrDefault( id, new Label().setName(id))) .map(Label::getName) .collect(Collectors.joining(", "))); message.setLabelIds(gmailMessageIds); } });
@Test public void importMessage() throws IOException { MailContainerResource resource = new MailContainerResource(null, Collections.singletonList(MESSAGE_MODEL)); ImportResult result = googleMailImporter.importItem(JOB_ID, null, resource); // Getting list of labels from Google verify(labelsList).execute(); // Importing message ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); verify(messages).insert(eq(GoogleMailImporter.USER), messageArgumentCaptor.capture()); assertThat(messageArgumentCaptor.getValue().getRaw()).isEqualTo(MESSAGE_RAW); // TODO(olsona): test labels } }
Message gmailMessage = entry.getValue(); Set<String> gmailLabels = gmailMessage.getLabelIds() == null ? ImmutableSet.of() : gmailMessage.getLabelIds().stream() .map(labelIdToNameMap::get) .collect(Collectors.toSet()); .map(labelIdToNameMap::get) .collect(Collectors.joining(", ")), gmailMessage.getId()); gmailApi.users().messages().modify( user.getEmailAddress(), gmailMessage.getId(), new ModifyMessageRequest().setAddLabelIds(missingLabelIds)) .queue(relabelBatch, new JsonBatchCallback<Message>() {
.messages() .gmailImport(user.getEmailAddress(), new Message(), new AbstractInputStreamContent("message/rfc822") { byte[] bytes = localMessage.getRawContent(); System.out.println(); Message result = r.execute(); System.out.println(result.toPrettyString()); return result; } catch (GoogleJsonResponseException e) {
String singleFilename = ""; Message fetched = gmailService.users().messages().get("me", message.getId()) .execute(); LOGGER.fine("==Fetched message "+fetched.getId()); HashMap<String, MessagePart> toDownload = new HashMap<>(); scanParts(fetched.getPayload().getParts(), toDownload); for(Map.Entry<String, MessagePart> entry : toDownload.entrySet()){ LOGGER.info("==Reading : "+singleFilename); String source = getSender(fetched.getPayload().getHeaders()); @SuppressWarnings("deprecation") String filename = (date.getYear() + 1900) + "-" + (date.getMonth() + 1) + "-" + date.getDate() + "-" + source+"-"+singleFilename.replaceAll(" ", "") + ".puz"; if(!destination.exists()){ byte[] data = entry.getValue().getBody().getAttachmentId() != null ? gmailService.users().messages().attachments().get("me", message.getId(), entry.getValue().getBody().getAttachmentId()).execute().decodeData() : entry.getValue().getBody().decodeData(); Puzzle puzzle = singleFilename.endsWith("jpz") ? puzzle.setDate(date); puzzle.setSource(source); puzzle.setSourceUrl("gmail://" + fetched.getId()); puzzle.setUpdatable(false); date = getSentDate(fetched.getPayload().getHeaders()); LOGGER.info("Downloaded "+filename); IO.save(puzzle, destination);
@Before public void setUp() { try { when(auth.getGmailService(anyString(), anyString())).thenReturn(gmailService); when(gmailService.users()).thenReturn(gmailUsers); when(gmailUsers.messages()).thenReturn(gmailUserMessages); when(gmailUserMessages.send(anyString(), anyObject())).thenReturn(gmailUserMessagesSend); when(gmailUserMessagesSend.execute()).thenReturn(new Message()); } catch (Exception e) { fail(e.getMessage()); } }
@Override public void onSuccess( Message message, HttpHeaders responseHeaders) throws IOException { System.out.format("Successfully added labels %s to %s\n", missingLabelIds.stream() .map(labelIdToNameMap::get) .collect(Collectors.joining(", ")), message.getId()); } });
public static Message createMessageWithEmail(MimeMessage emailContent) throws MessagingException, IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); emailContent.writeTo(buffer); byte[] bytes = buffer.toByteArray(); String encodedEmail = Base64.encodeBase64URLSafeString(bytes); Message message = new Message(); message.setRaw(encodedEmail); return message; }
private MimeMessage convertFromMessageToMimeMessage(Message message) throws MessagingException { byte[] emailBytes = BaseEncoding.base64Url().decode(message.getRaw()); // While we are not actually sending or receiving an email, a session is required so there will be strict parsing // of address headers when we create a MimeMessage. We are also passing in empty properties where we are expected to // supply some values because we are not actually sending or receiving any email. Session session = Session.getInstance(new Properties()); return new MimeMessage(session, new ByteArrayInputStream(emailBytes)); }
@Override public void onFailure( GoogleJsonError e, HttpHeaders responseHeaders) throws IOException { System.err.format("For message: %s, got error: %s\n", message.getId(), e.toPrettyString()); }
/** * Sends the specified message to the recipients in the To, Cc, and Bcc headers. * * Create a request for the method "messages.send". * * This request holds the parameters needed by the the gmail server. After setting any optional * parameters, call the {@link Send#execute()} method to invoke the remote operation. <p> {@link * Send#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be * called to initialize this instance immediately after invoking the constructor. </p> * * @param userId The user's email address. The special value me can be used to indicate the authenticated user. * [default: me] * @param content the {@link com.google.api.services.gmail.model.Message} * @since 1.13 */ protected Send(java.lang.String userId, com.google.api.services.gmail.model.Message content) { super(Gmail.this, "POST", REST_PATH, content, com.google.api.services.gmail.model.Message.class); this.userId = com.google.api.client.util.Preconditions.checkNotNull(userId, "Required parameter userId must be specified."); checkRequiredParameter(content, "content"); checkRequiredParameter(content.getRaw(), "Message.getRaw()"); }
/** * Retrieves the registration key among the unread emails * with {@code courseId} and {@code courseName} sent to the Gmail inbox. * * <p>After retrieving, marks the email as read. * * <p>If multiple emails of the same course are in the inbox, return the registration key presented in one of them. * * @return registration key (null if cannot be found). */ public String getRegistrationKeyFromUnreadEmails(String courseName, String courseId) throws IOException, MessagingException { List<Message> messageStubs = getListOfUnreadEmailOfUser(); for (Message messageStub : messageStubs) { Message message = service.users().messages().get(username, messageStub.getId()).setFormat("raw") .execute(); MimeMessage email = convertFromMessageToMimeMessage(message); if (isStudentCourseJoinRegistrationEmail(email, courseName, courseId)) { String body = getTextFromEmail(email); markMessageAsRead(messageStub); return getKey(body); } } return null; }
/** * Directly inserts a message into only this user's mailbox similar to IMAP APPEND, bypassing most * scanning and classification. Does not send a message. * * Create a request for the method "messages.insert". * * This request holds the parameters needed by the the gmail server. After setting any optional * parameters, call the {@link Insert#execute()} method to invoke the remote operation. <p> {@link * Insert#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must * be called to initialize this instance immediately after invoking the constructor. </p> * * @param userId The user's email address. The special value me can be used to indicate the authenticated user. * [default: me] * @param content the {@link com.google.api.services.gmail.model.Message} * @since 1.13 */ protected Insert(java.lang.String userId, com.google.api.services.gmail.model.Message content) { super(Gmail.this, "POST", REST_PATH, content, com.google.api.services.gmail.model.Message.class); this.userId = com.google.api.client.util.Preconditions.checkNotNull(userId, "Required parameter userId must be specified."); checkRequiredParameter(content, "content"); checkRequiredParameter(content.getRaw(), "Message.getRaw()"); }
@Override public void onSuccess( ListMessagesResponse response, HttpHeaders responseHeaders) throws IOException { if (!response.isEmpty()) { results.putAll(localMessage, response.getMessages()); System.err.println( "For " + localMessage.getMessageId() + " got:"); response.getMessages().stream().forEach(message -> System.err.println(" message id: " + message.getId())); } } });
@Override public void onFailure( GoogleJsonError e, HttpHeaders responseHeaders) throws IOException { System.err.format("For message: %s, got error: %s\n", message.getId(), e.toPrettyString()); if (e.getCode() == TOO_MANY_CONCURRENT_REQUESTS_FOR_USER) { request.queue(batches.nextBatch, this); } }
.modify(user.getEmailAddress(), message.getId(), new ModifyMessageRequest() .setAddLabelIds(labelIdsToAdd)