diff --git a/src/java/davmail/exchange/VCardReader.java b/src/java/davmail/exchange/VCardReader.java index 525da074..e9de948a 100644 --- a/src/java/davmail/exchange/VCardReader.java +++ b/src/java/davmail/exchange/VCardReader.java @@ -106,7 +106,13 @@ public class VCardReader extends ICSBufferedReader { } } // iPhone encodes category separator - if (c == ',' && !"NOTE".equals(key)) { + if (c == ',' && + // multivalued properties + ("N".equals(key) || + "ADR".equals(key) || + "CATEGORIES".equals(key) || + "NICKNAME".equals(key) + )) { // convert multiple values to multiline values (e.g. street) c = '\n'; } diff --git a/src/test/davmail/exchange/TestExchangeSessionContact.java b/src/test/davmail/exchange/TestExchangeSessionContact.java index 8e2b4785..1aa5ee54 100644 --- a/src/test/davmail/exchange/TestExchangeSessionContact.java +++ b/src/test/davmail/exchange/TestExchangeSessionContact.java @@ -372,4 +372,21 @@ public class TestExchangeSessionContact extends AbstractExchangeSessionTestCase ExchangeSession.ItemResult result = session.createOrUpdateContact("testcontactfolder", itemName, itemBody, contact.etag, null); assertEquals(200, result.status); } + + public void testIphoneEncodedComma() throws IOException { + ExchangeSession.Contact contact = getCurrentContact(); + + VCardWriter vCardWriter = new VCardWriter(); + vCardWriter.startCard(); + vCardWriter.appendProperty("ITEM1.TEL;TYPE=CELL;TYPE=pref", "mobile\\, with comma"); + vCardWriter.endCard(); + + ExchangeSession.ItemResult result = session.createOrUpdateContact("testcontactfolder", itemName, vCardWriter.toString(), contact.etag, null); + assertEquals(200, result.status); + + contact = getCurrentContact(); + + assertEquals("mobile, with comma", contact.get("mobile")); + + } }