Index: src/camel/camel-mapi-folder.c
===================================================================
--- src/camel/camel-mapi-folder.c	(revision 187)
+++ src/camel/camel-mapi-folder.c	(working copy)
@@ -709,6 +709,7 @@ end1:
 static const uint32_t camel_GetPropsList[] = {
 	PR_FID, 
 	PR_MID, 
+	PR_INTERNET_CPID,
 
 	PR_MESSAGE_CLASS, 
 	PR_MESSAGE_CLASS_UNICODE, 
@@ -875,6 +876,11 @@ fetch_item_cb (FetchItemsCallbackData *i
 		gconstpointer prop_data = get_mapi_SPropValue_data(&item_data->properties->lpProps[j]);
 
 		switch (item_data->properties->lpProps[j].ulPropTag) {
+		case PR_INTERNET_CPID: {
+			const uint32_t *ui32 = (const uint32_t *) prop_data;
+			if (ui32)
+				item->header.cpid = *ui32;
+			} break;
 		/*FIXME : Instead of duping. Use talloc_steal to reuse the memory*/
 		case PR_NORMALIZED_SUBJECT:
 		case PR_NORMALIZED_SUBJECT_UNICODE :
@@ -1048,11 +1054,20 @@ mapi_populate_msg_body_from_item (CamelM
 		if (item->is_cal)
 			camel_mime_part_set_content(part, (const char *) body->value->data, body->value->len, "text/calendar");
 		else {
+			char *buff = NULL;
+
 			type = (body->proptag == PR_BODY || body->proptag == PR_BODY_UNICODE) ? 
 				"text/plain" : "text/html";
 
+			if (item->header.cpid) {
+				buff = g_strdup_printf ("%s; charset=\"CP%d\"", type, item->header.cpid);
+				type = buff;
+			}
+
 			/*NOTE : Last byte null mess up CRLF*. Probably needs a fix in e*fetch_items. */
 			camel_mime_part_set_content (part, (const char *) body->value->data, body->value->len - 1, type );
+			g_free (buff);
+			type = NULL;
 		}
 	} else
 		camel_mime_part_set_content(part, " ", strlen(" "), "text/html");
Index: src/camel/camel-mapi-folder.h
===================================================================
--- src/camel/camel-mapi-folder.h	(revision 186)
+++ src/camel/camel-mapi-folder.h	(working copy)
@@ -70,6 +70,7 @@ typedef struct {
 	glong size;
 	time_t recieved_time;
 	time_t send_time;
+	guint cpid; /* codepage id */
 } MapiItemHeader;
 
 typedef struct {
