mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-13 19:22:22 -05:00
IMAP: Fix 3383832, set ItemClass to send read receipt over EWS to avoid ErrorObjectTypeChanged
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1762 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
0b5a22f63f
commit
4bc0773aa7
@ -658,14 +658,6 @@ public abstract class ExchangeSession {
|
||||
*/
|
||||
public abstract void deleteMessage(Message message) throws IOException;
|
||||
|
||||
/**
|
||||
* Send message.
|
||||
*
|
||||
* @param messageBody MIME message body
|
||||
* @throws IOException on error
|
||||
*/
|
||||
public abstract void sendMessage(byte[] messageBody) throws IOException;
|
||||
|
||||
/**
|
||||
* Get raw MIME message content
|
||||
*
|
||||
@ -1236,7 +1228,7 @@ public abstract class ExchangeSession {
|
||||
* @param mimeMessage MIME message
|
||||
* @throws IOException on error
|
||||
*/
|
||||
public abstract void sendMessage(MimeMessage mimeMessage) throws IOException;
|
||||
public abstract void sendMessage(MimeMessage mimeMessage) throws IOException, MessagingException;
|
||||
|
||||
/**
|
||||
* Get folder object.
|
||||
@ -2224,9 +2216,9 @@ public abstract class ExchangeSession {
|
||||
protected byte[] getICS(InputStream mimeInputStream) throws IOException, MessagingException {
|
||||
byte[] result;
|
||||
MimeMessage mimeMessage = new MimeMessage(null, mimeInputStream);
|
||||
String[] contentClass = mimeMessage.getHeader("Content-class");
|
||||
String[] contentClassHeader = mimeMessage.getHeader("Content-class");
|
||||
// task item, return null
|
||||
if (contentClass != null && contentClass.length > 0 && "urn:content-classes:task".equals(contentClass[0])) {
|
||||
if (contentClassHeader != null && contentClassHeader.length > 0 && "urn:content-classes:task".equals(contentClassHeader[0])) {
|
||||
return null;
|
||||
}
|
||||
Object mimeBody = mimeMessage.getContent();
|
||||
|
@ -2490,9 +2490,11 @@ public class DavExchangeSession extends ExchangeSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Send message.
|
||||
*
|
||||
* @param messageBody MIME message body
|
||||
* @throws IOException on error
|
||||
*/
|
||||
@Override
|
||||
public void sendMessage(byte[] messageBody) throws IOException {
|
||||
try {
|
||||
sendMessage(new MimeMessage(null, new SharedByteArrayInputStream(messageBody)));
|
||||
|
@ -500,6 +500,11 @@ public abstract class EWSMethod extends PostMethod {
|
||||
writer.write("<t:");
|
||||
writer.write(type);
|
||||
writer.write(">");
|
||||
if (mimeContent != null) {
|
||||
writer.write("<t:MimeContent>");
|
||||
writer.write(new String(mimeContent));
|
||||
writer.write("</t:MimeContent>");
|
||||
}
|
||||
// write ordered fields
|
||||
for (String key : fieldNames) {
|
||||
if ("MeetingTimeZone".equals(key)) {
|
||||
@ -520,11 +525,6 @@ public abstract class EWSMethod extends PostMethod {
|
||||
writer.write(">");
|
||||
}
|
||||
}
|
||||
if (mimeContent != null) {
|
||||
writer.write("<t:MimeContent>");
|
||||
writer.write(new String(mimeContent));
|
||||
writer.write("</t:MimeContent>");
|
||||
}
|
||||
if (fieldUpdates != null) {
|
||||
for (FieldUpdate fieldUpdate : fieldUpdates) {
|
||||
fieldUpdate.write(null, writer);
|
||||
|
@ -440,11 +440,14 @@ public class EwsExchangeSession extends ExchangeSession {
|
||||
executeMethod(deleteItemMethod);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(byte[] messageBody) throws IOException {
|
||||
|
||||
public void sendMessage(String itemClass, byte[] messageBody) throws IOException {
|
||||
EWSMethod.Item item = new EWSMethod.Item();
|
||||
item.type = "Message";
|
||||
item.mimeContent = Base64.encodeBase64(messageBody);
|
||||
if (itemClass != null) {
|
||||
item.put("ItemClass", itemClass);
|
||||
}
|
||||
|
||||
MessageDisposition messageDisposition;
|
||||
if (Settings.getBooleanProperty("davmail.smtpSaveInSent", true)) {
|
||||
@ -458,14 +461,19 @@ public class EwsExchangeSession extends ExchangeSession {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(MimeMessage mimeMessage) throws IOException {
|
||||
public void sendMessage(MimeMessage mimeMessage) throws IOException, MessagingException {
|
||||
String itemClass = null;
|
||||
if (mimeMessage.getContentType().startsWith("multipart/report")) {
|
||||
itemClass = "REPORT.IPM.Note.IPNRN";
|
||||
}
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
try {
|
||||
mimeMessage.writeTo(baos);
|
||||
} catch (MessagingException e) {
|
||||
throw new IOException(e.getMessage());
|
||||
}
|
||||
sendMessage(baos.toByteArray());
|
||||
sendMessage(itemClass, baos.toByteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1684,7 +1692,7 @@ public class EwsExchangeSession extends ExchangeSession {
|
||||
// no recipients, cancel
|
||||
return HttpStatus.SC_NO_CONTENT;
|
||||
} else {
|
||||
sendMessage(mimeContent);
|
||||
sendMessage(null, mimeContent);
|
||||
return HttpStatus.SC_OK;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user