Question:
I have an email message with a Multipart/mixed content type. The get_NumParts() method returns 1 but the getBodyDecoded() returns an empty string. Below is an example of the mail I am trying to parse.
content-Type: multipart/mixed; boundary="----msg_border_oyclZ0HtKZ"
This is a multi-part message in MIME format.
------msg_border_oyclZ0HtKZ
Date: Mon, 26 Aug 2013 12:46:24 -0700
Content-Type: multipart/alternative; boundary="----alt_border_Fu87pgEhas_1"
------alt_border_Fu87pgEhas_1
Content-Type: text/plain;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Having trouble viewing this message? Click here=2E=20
------alt_border_Fu87pgEhas_1
Content-Type: text/html;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<=21doctype html>
<html xmlns=3D=22http://www=2Ew3=2Eorg/1999/xhtml=22>
<body>
<p>This is an html document</p>
</body>
</html>
------alt_border_Fu87pgEhas_1--
------msg_border_oyclZ0HtKZ--
MIME messages (such as this) are hierarchical and have a tree structure (just like XML). Conceptually, a MIME node can have child nodes, but the child nodes themselves (and the content within the child nodes) are not considered the "content" (i.e. body) of the parent. Typically, a MIME part (i.e. node) that is multipart, meaning that it has child nodes, will have no "content". It only has child nodes. It is only the leaf nodes that have a body. (Chilkat's XML API follows this same idea.)
Therefore, you should navigate to the leaf node, such as the "text/plain" or the "text/html" to get either the plain-text body or the HTML body.
Yes. Call GetPart(n) to get the Nth immediate child of a mime object. For example:
CkMime *child = mime.GetPart(0); // Pass 0 to get the 1st child, 1 to get the 2nd, etc.Check to make sure child is non-null. Your app will have to delete any objects returned by a Chilkat method. After getting the child, check the ContentType, if it's multipart (has NumParts > 0) then get that object's sub-parts, etc., until you reach the part where the content-type is text/plain or whatever you want..