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

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

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

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

我使用了一個(gè)三方庫(kù)Gmime

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

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

1.編譯

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

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

如果在編譯過(guò)程中報(bào)錯(cuò)的話,基本都是缺少相關(guān)依賴(lài)庫(kù),下載安裝即可

2.makefile注意事項(xiàng)

使用gmime時(shí),在makefile文件中要加入兩個(gè)鏈接庫(kù),libgobject.so和libgmime.so

版本不同,在連接時(shí)也有差異,我用的是gmime3.2.7版本

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

這里有個(gè)注意的地方,gmime.h文件在編譯時(shí)依賴(lài)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)建一個(gè) GMimeStream
        stream = g_mime_stream_file_new(fopen("/usr/local/zbs_test/eml/測(cè)試001.eml", "r"));
        // 創(chuàng)建一個(gè)新的 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("------------------開(kāi)始\n");
    test();
    g_mime_shutdown();
    return 0;
}

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    C++ Dijkstra算法之求圖中任意兩頂點(diǎn)的最短路徑

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

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

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

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

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

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

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

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

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

    C語(yǔ)言的運(yùn)算符你了解嗎

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

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

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

最新評(píng)論

凉城县| 沅江市| 尼玛县| 尉犁县| 同江市| 旅游| 澎湖县| 山阴县| 文安县| 比如县| 普陀区| 平潭县| 葫芦岛市| 富顺县| 龙川县| 株洲市| 东宁县| 布拖县| 义马市| 游戏| 盐城市| 轮台县| 克拉玛依市| 隆安县| 阿拉尔市| 三穗县| 涿州市| 历史| 桐庐县| 正阳县| 申扎县| 吐鲁番市| 巴彦县| 扬州市| 商都县| 平顺县| 名山县| 汉阴县| 乌什县| 广饶县| 竹溪县|