首页 > 解决方案 > 如何计算单个多部分中的部分数量?

问题描述

使用下面的代码,我可以计算 MIME 消息的所有部分,但是我的要求是在单个多部分正文中计算部分,有人可以帮忙吗?

void testFunc() {
            GMimeStream* stream;
            GMimeParser* parser;
            GMimeMessage* msg;
            GMimeObject* root = NULL;

            stream = g_mime_stream_fs_new(fd); // Fd is the email file
            parser = g_mime_parser_new_with_stream(stream);
            g_object_unref(stream);
            msg = g_mime_parser_construct_message(parser);
            g_object_unref(parser);
            if (msg) {
                root = g_mime_message_get_mime_part(msg);
                int part_count=0;
                scan_part(root, &scan_data, &part_count);
            }
}

static void scan_part(GMimeObject *part, struct scan_part_data *scan_data, int *part_count) {
    gboolean is_multipart = GMIME_IS_MULTIPART(part);
    if (is_multipart) {
        GMimeMultipart* mpart = GMIME_MULTIPART(part);
        int count = g_mime_multipart_get_count(mpart);
        int i;

        for (i = 0; i < count; i++) {
            GMimeObject* subpart = g_mime_multipart_get_part(mpart, i);
            scan_part(subpart, scan_data, part_count);
            return;
        }
    } else if (GMIME_IS_MESSAGE_PART(part)) {
        GMimeMessage* msg = g_mime_message_part_get_message(GMIME_MESSAGE_PART(part));
        GMimeObject* subpart = g_mime_message_get_mime_part(msg);
        scan_part(subpart, scan_data, part_count);
        return;
    }

    gboolean is_part = GMIME_IS_PART(part);
    if (is_part || is_multipart) {
        (*part_count)++;
        // some code;
    }
}

标签: cmime

解决方案


要获取单个多部分的计数,只需执行以下操作:

int count = g_mime_multipart_get_count (multipart);

推荐阅读