亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2024年01月14日 10:48:16   作者:風(fēng)也換了脾氣  
這篇文章主要為大家詳細(xì)介紹了如何通過C++實(shí)現(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注意事項(xiàng)

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

相關(guān)文章

  • 淺析stl序列容器(map和set)的仿函數(shù)排序

    淺析stl序列容器(map和set)的仿函數(shù)排序

    有序的stl容器在工程中應(yīng)用什么方便和廣泛,但是當(dāng)我們需要自己的排序的時候,可以用仿函數(shù)來設(shè)置它
    2013-09-09
  • C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù))

    C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù))

    cJSON是一個超輕巧的JSON解析器,本文主要介紹了C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù)),具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • C++輸入空格字符串的三種解決方法

    C++輸入空格字符串的三種解決方法

    字符串一直是一個重點(diǎn)加難點(diǎn),很多筆試面試都會涉及,帶空格的字符串更是十分常見,現(xiàn)在對字符串的輸入問題進(jìn)行一下總結(jié),本文給大家詳細(xì)介紹了C++輸入空格字符串的三種解決方法,需要的朋友可以參考下
    2025-04-04
  • OpenCV實(shí)現(xiàn)圖像邊緣檢測

    OpenCV實(shí)現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++迭代器失效解決辦法詳解

    C++迭代器失效解決辦法詳解

    這篇文章主要介紹了迭代器失效的概念,以及在vector、list和map等容器中插入和刪除操作導(dǎo)致迭代器失效的情況,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • C語言函數(shù)棧幀詳解

    C語言函數(shù)棧幀詳解

    下面小編就為大家?guī)硪黄獪\談C語言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • C++11?std::transform函數(shù)使用小結(jié)

    C++11?std::transform函數(shù)使用小結(jié)

    std::transform是C++標(biāo)準(zhǔn)庫中的一個算法,它用于對輸入范圍內(nèi)的元素進(jìn)行操作,并將結(jié)果存儲在輸出范圍內(nèi),本文就介紹了std::transform函數(shù)的具體使用,感興趣的可以了解一下
    2023-09-09
  • 用while判斷輸入的數(shù)字是否回文數(shù)的簡單實(shí)現(xiàn)

    用while判斷輸入的數(shù)字是否回文數(shù)的簡單實(shí)現(xiàn)

    這篇文章主要介紹了用while判斷輸入的數(shù)字是否回文數(shù)的簡單實(shí)現(xiàn),需要的朋友可以參考下
    2014-02-02
  • C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    從 C++11 開始,標(biāo)準(zhǔn)庫提供了 std::bind 用于綁定函數(shù) f 和調(diào)用參數(shù),返回一個新可調(diào)用函數(shù)對象 fn,下面就跟隨小編一起深入了解一下std::bind的具體使用吧
    2023-12-12
  • C++11中delete和default的用法詳解

    C++11中delete和default的用法詳解

    這篇文章主要為大家詳細(xì)介紹了C++11中delete和default的具體用法,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-08-08

最新評論