Hi Steve, On 5/23/2014 2:07 PM, Steve Kemp wrote:
[snip]
I identify attachments by:
const char *filename = g_mime_object_get_content_disposition_parameter(part, "filename");
if ( filename != NULL )
{
.. attachment ..
}
As inline-parts don't contain filenames this results in the
inline-parts not being visible.
Be careful with this approach because this general rule isn't necessarily true. The best way to determine if a MIME part is meant to be treated as an attachment or not is to check that the Content-Disposition value matches "attachment" (instead of "inline") in a case-insensitive comparison.
Is there a simple way that I can handle getting both "attachments" and "inline parts"? I looked at the content-disposition functions, but didn't see a simple way to go from there.
Your iterator loop above will iterate over all attachment and inline parts. You can use the following logic to determine if a part is an attachment (if it's not an attachment, then it is an inline part):
GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
if (disposition != null && disposition->disposition != null && !g_strcasecmp (disposition->disposition, "attachment")) {
// the part is an attachment
} else {
// the part is an inline part
}
I got this question a few times with the C# version of GMime (aka
MimeKit) that I've been working on and I ended up adding a
ContentDisposition.IsAttachment property (I think I also added a
MimePart.IsAttachment property as well). Perhaps I can do something
similar in GMime to make this a bit easier...
Hope that helps, Jeff
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature