C++实现获取邮件中的附件

 更新时间:2024年01月14日 10:48:16   作者:风也换了脾气  
这篇文章主要为大家详细介绍了如何通过C++实现获取邮件文件中的附件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

本篇记录一下获取邮件文件eml中的附件

我使用了一个三方库Gmime

先下载源码进行编译,官方地址:

https://gitcode.com/jstedfast/gmime/overview

1.编译

对下载的文件进行解压

tar -xvf gmime-3.2.7.tar.xz
cd gmime-3.2.7
./configure
make -j8 && make install

如果在编译过程中报错的话,基本都是缺少相关依赖库,下载安装即可

2.makefile注意事项

使用gmime时,在makefile文件中要加入两个链接库,libgobject.so和libgmime.so

版本不同,在连接时也有差异,我用的是gmime3.2.7版本

在makefile中加入了-lgobject-2.0和-lgmime-3.0

这里有个注意的地方,gmime.h文件在编译时依赖glib.h,所以还需要在makefile中加入

glib的路径

3.完整代码

#include <iostream>
#include <gmime/gmime.h>
using namespace std;
 
void test()
{
    int i = 0;
    sleep(10);
    printf("666666666666666666666666666666666\n");
    while (i <= 10)
    {
        i++;
        GMimeStream *stream;
        GMimeParser *parser;
        GMimeMessage *message;
        GMimePart *part;
        GMimeDataWrapper *wrapper;
        const char *filename;
        // 从文件中创建一个 GMimeStream
        stream = g_mime_stream_file_new(fopen("/usr/local/zbs_test/eml/测试001.eml", "r"));
        // 创建一个新的 GMimeParser
        parser = g_mime_parser_new_with_stream(stream);
        // 从邮件中解析消息
        message = g_mime_parser_construct_message(parser, NULL);
        GMimePartIter *iter = g_mime_part_iter_new((GMimeObject *)message);
 
        while (g_mime_part_iter_next(iter))
        {
            string path = "/usr/local/zbs_test/target/";
            GMimeObject *current = g_mime_part_iter_get_current(iter);
            GMimeObject *parent = g_mime_part_iter_get_parent(iter);
            if (GMIME_IS_MULTIPART(parent) && GMIME_IS_PART(current))
            {
                GMimePart *part = (GMimePart *)current;
                if (g_mime_part_is_attachment(part))
                {
                    // 获取附件的文件名
                    filename = g_mime_part_get_filename(part);
                    path = path + to_string(i) +filename;
                    printf("名字:%s \n", path.c_str());
                    // 保存附件到文件
                    if (filename)
                    {
                        wrapper = g_mime_part_get_content(part);
                        GMimeStream *save_stream = g_mime_stream_file_new(fopen(path.c_str(), "w"));
                        g_mime_data_wrapper_write_to_stream(wrapper, save_stream);
                        g_object_unref(save_stream);
                    }
                }
            }
        }
 
        // 释放资源
        g_mime_part_iter_free (iter);
        g_object_unref(GMIME_OBJECT(message));
        g_object_unref(parser);
        g_object_unref(stream);
        sleep(3);
    }
    printf("-------------------------------------结束 \n");
    sleep(5);
}
 
int main()
{
    g_mime_init();
    printf("------------------开始\n");
    test();
    g_mime_shutdown();
    return 0;
}

Gmime有很多自己的使用例子,有需要的话可以看看

每个函数也都有详细的注释

到此这篇关于C++实现获取邮件中的附件的文章就介绍到这了,更多相关C++获取邮件附件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中数据结构之链式基数排序

    C语言中数据结构之链式基数排序

    这篇文章主要介绍了C语言中数据结构之链式基数排序的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • C语言中的strlen()和sizeof()对比分析

    C语言中的strlen()和sizeof()对比分析

    这篇文章主要介绍了C语言中的strlen()和sizeof()区别对比,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • C++实现猜数字游戏

    C++实现猜数字游戏

    这篇文章主要为大家详细介绍了C++实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 基于QT实现本地音乐播放器

    基于QT实现本地音乐播放器

    这篇文章主要为大家详细介绍了如何基于QT实现简单的本地音乐播放器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C语言获取Linux系统精确时间的方法

    C语言获取Linux系统精确时间的方法

    下面小编就为大家带来一篇C语言获取Linux系统精确时间的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • C 语言基础之C 语言三大语句注意事项

    C 语言基础之C 语言三大语句注意事项

    今天讲解的内容,则是自己对于这三种语句一些细节的简单介绍,分支语句:if,switch、循环语句:while,for,do while、goto语句,感兴趣的小伙伴可以参考下面具体的文章内容
    2021-09-09
  • 美化你的代码 vb(VBS)代码格式化的实现代码

    美化你的代码 vb(VBS)代码格式化的实现代码

    虽然VB.NET出现很久了,但还有好多人仍然在使用VB6。我在实现一些小功能的时候也喜欢用VB6,毕竟谁都不想每天的美好心情被VS那乌龟般的启动速度影响
    2012-05-05
  • 深入分析C++中deque的使用

    深入分析C++中deque的使用

    本篇文章介绍了,深入分析C++中deque的使用。需要的朋友参考下
    2013-05-05
  • 深入ORACLE变量的定义与使用的详解

    深入ORACLE变量的定义与使用的详解

    本篇文章是对ORACLE变量的定义与使用进行了详细的分析与介绍,需要的朋友参考下
    2013-05-05
  • C语言中等待socket连接和对socket定位的方法

    C语言中等待socket连接和对socket定位的方法

    这篇文章主要介绍了C语言中等待socket连接和对socket定位的方法,分别为listen()函数和bind()函数的用法,需要的朋友可以参考下
    2015-09-09

最新评论