最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)獲取郵件中的附件

 更新時間:2024年01月14日 10:48:16   作者:風(fēng)也換了脾氣  
這篇文章主要為大家詳細(xì)介紹了如何通過C++實現(xiàn)獲取郵件文件中的附件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本篇記錄一下獲取郵件文件eml中的附件

我使用了一個三方庫Gmime

先下載源碼進(jìn)行編譯,官方地址:

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

1.編譯

對下載的文件進(jìn)行解壓

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

如果在編譯過程中報錯的話,基本都是缺少相關(guān)依賴庫,下載安裝即可

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;
        // 從文件中創(chuàng)建一個 GMimeStream
        stream = g_mime_stream_file_new(fopen("/usr/local/zbs_test/eml/測試001.eml", "r"));
        // 創(chuàng)建一個新的 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("-------------------------------------結(jié)束 \n");
    sleep(5);
}
 
int main()
{
    g_mime_init();
    printf("------------------開始\n");
    test();
    g_mime_shutdown();
    return 0;
}

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

每個函數(shù)也都有詳細(xì)的注釋

到此這篇關(guān)于C++實現(xiàn)獲取郵件中的附件的文章就介紹到這了,更多相關(guān)C++獲取郵件附件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)字符串分割的實例

    C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)字符串分割的實例

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)字符串分割的實例的相關(guān)資料,希望通過本文能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C語言中volatile關(guān)鍵字的作用與使用案例教程

    C語言中volatile關(guān)鍵字的作用與使用案例教程

    這篇文章主要介紹了C語言中volatile關(guān)鍵字的作用與使用案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Matlab實現(xiàn)貪吃蛇小游戲的示例代碼

    Matlab實現(xiàn)貪吃蛇小游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ Dijkstra算法之求圖中任意兩頂點的最短路徑

    C++ Dijkstra算法之求圖中任意兩頂點的最短路徑

    這篇文章主要為大家詳細(xì)介紹了用C++經(jīng)典算法-Dijkstra算法求任意兩頂點之間的最短路徑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++實現(xiàn)LeetCode(53.最大子數(shù)組)

    C++實現(xiàn)LeetCode(53.最大子數(shù)組)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(53.最大子數(shù)組),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 剖析C++編程當(dāng)中指針作為函數(shù)參數(shù)的用法

    剖析C++編程當(dāng)中指針作為函數(shù)參數(shù)的用法

    這篇文章主要介紹了剖析C++編程當(dāng)中指針作為函數(shù)參數(shù)的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • c++實現(xiàn)二叉查找樹示例

    c++實現(xiàn)二叉查找樹示例

    這篇文章主要介紹了c++實現(xiàn)二叉查找樹示例,實現(xiàn)二叉查找樹的基本功能,需要的朋友可以參考下
    2014-02-02
  • C++棧實現(xiàn)逆波蘭式的應(yīng)用

    C++棧實現(xiàn)逆波蘭式的應(yīng)用

    逆波蘭式指的是操作符在其所控制的操作數(shù)后面的表達(dá)式。本文主要介紹了C++棧實現(xiàn)逆波蘭式的應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言的運算符你了解嗎

    C語言的運算符你了解嗎

    這篇文章主要介紹了C語言中的運算符,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C++程序內(nèi)存棧區(qū)與堆區(qū)模型案例分析

    C++程序內(nèi)存棧區(qū)與堆區(qū)模型案例分析

    一直以來總是對這個問題的認(rèn)識比較朦朧,我相信很多朋友也是這樣的,總是聽到內(nèi)存一會在棧上分配,一會又在堆上分配,那么它們之間到底是怎么的區(qū)別呢,讓我們一起來看看
    2022-03-03

最新評論

江西省| 博客| 宣化县| 三台县| 临清市| 东城区| 蒙城县| 黑山县| 常熟市| 昌平区| 白银市| 濉溪县| 泾阳县| 虎林市| 中牟县| 和静县| 马关县| 绥棱县| 建始县| 芷江| 塔河县| 昌黎县| 唐河县| 盐源县| 交城县| 饶阳县| 枣庄市| 县级市| 望谟县| 贵港市| 神木县| 宁德市| 百色市| 宁远县| 渝中区| 景德镇市| 靖西县| 绥德县| 二连浩特市| 扎鲁特旗| 合阳县|