diff --git a/src/java/davmail/exchange/ews/EwsExchangeSession.java b/src/java/davmail/exchange/ews/EwsExchangeSession.java index 25e8100f..bd8f21eb 100644 --- a/src/java/davmail/exchange/ews/EwsExchangeSession.java +++ b/src/java/davmail/exchange/ews/EwsExchangeSession.java @@ -149,8 +149,6 @@ public class EwsExchangeSession extends ExchangeSession { if ("104".equals(entry.getValue())) { list.add(Field.createFieldUpdate("iconIndex", "262")); } - } else if ("bcc".equals(entry.getKey())) { - list.add(Field.createFieldUpdate("bcc", entry.getValue())); } else if ("draft".equals(entry.getKey())) { // note: draft is readonly after create list.add(Field.createFieldUpdate("messageFlags", entry.getValue())); @@ -219,11 +217,18 @@ public class EwsExchangeSession extends ExchangeSession { public void sendMessage(HashMap properties, String messageBody) throws IOException { EWSMethod.Item item = new EWSMethod.Item(); item.type = "Message"; - item.mimeContent = Base64.encodeBase64(messageBody.getBytes()); - // TODO: handle bcc + String bcc = properties.get("bcc"); + if (bcc != null) { + properties.remove("bcc"); + // put bcc header back into mime body, Exchange will handle it on send + item.mimeContent = Base64.encodeBase64(("bcc: "+bcc+ "\r\n" +messageBody).getBytes()); + } else { + item.mimeContent = Base64.encodeBase64(messageBody.getBytes()); + } + Set fieldUpdates = buildProperties(properties); item.setFieldUpdates(fieldUpdates); - CreateItemMethod createItemMethod = new CreateItemMethod(MessageDisposition.SendAndSaveCopy, getFolderId("Drafts"), item); + CreateItemMethod createItemMethod = new CreateItemMethod(MessageDisposition.SendAndSaveCopy, getFolderId(SENT), item); executeMethod(createItemMethod); } @@ -539,7 +544,7 @@ public class EwsExchangeSession extends ExchangeSession { if (baseFolderPath.startsWith("/users/")) { int index = baseFolderPath.indexOf('/', "/users/".length()); if (index >= 0) { - baseFolderPath = baseFolderPath.substring(index+1); + baseFolderPath = baseFolderPath.substring(index + 1); } } List folders = new ArrayList(); diff --git a/src/test/davmail/smtp/TestSmtp.java b/src/test/davmail/smtp/TestSmtp.java index d17621a8..ba0ef5c7 100644 --- a/src/test/davmail/smtp/TestSmtp.java +++ b/src/test/davmail/smtp/TestSmtp.java @@ -88,8 +88,7 @@ public class TestSmtp extends AbstractDavMailTestCase { } - public void testCreateMessage() throws IOException, MessagingException { - + public void testSendMessage() throws IOException, MessagingException { MimeMessage mimeMessage = new MimeMessage((Session) null); mimeMessage.addHeader("To", Settings.getProperty("davmail.to")); mimeMessage.setText("Test message"); @@ -108,6 +107,27 @@ public class TestSmtp extends AbstractDavMailTestCase { assertEquals("250 Queued mail for delivery", readLine()); } + public void testBccMessage() throws IOException, MessagingException { + MimeMessage mimeMessage = new MimeMessage((Session) null); + mimeMessage.addHeader("to", Settings.getProperty("davmail.to")); + mimeMessage.setText("Test message"); + mimeMessage.setSubject("Test subject"); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + mimeMessage.writeTo(baos); + byte[] content = baos.toByteArray(); + writeLine("MAIL FROM:"+session.getEmail()); + readLine(); + writeLine("RCPT TO:"+Settings.getProperty("davmail.to")); + readLine(); + writeLine("RCPT TO:"+Settings.getProperty("davmail.bcc")); + readLine(); + writeLine("DATA"); + assertEquals("354 Start mail input; end with .", readLine()); + writeLine(new String(content)); + writeLine("."); + assertEquals("250 Queued mail for delivery", readLine()); + } + public void testQuit() throws IOException { writeLine("QUIT"); assertEquals("221 Closing connection", readLine());