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++获取邮件附件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论