【问题标题】:C++ send zip file using google email with curlC++ 使用带有 curl 的谷歌电子邮件发送 zip 文件
【发布时间】:2021-01-02 01:35:02
【问题描述】:

我正在使用 c++ 和 curl 发送带有附件的电子邮件,在这个例子中是一个 zip 存档。我在 gmail 上收到电子邮件,但是当我下载 .zip 时,如果我尝试使用 WinRar 提取内容,则会收到错误消息:

The archive is either in unknown format or damaged

zip没问题,我可以先解压再发送。

这是发送文件的函数:

int sendFile()
{
    CURL *curl;
    CURLcode res = CURLE_OK;

    curl = curl_easy_init();
    if(curl) {
        struct curl_slist *headers = NULL;
        struct curl_slist *recipients = NULL;
        struct curl_slist *slist = NULL;
        curl_mime *mime;
        curl_mime *alt;
        curl_mimepart *part;
        const char **cpp;

        /* This is the URL for your mailserver */
        curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465");


        curl_easy_setopt(curl, CURLOPT_USERNAME, "email");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);

      
        curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM_ADDR);

      
        recipients = curl_slist_append(recipients, TO_ADDR);
        recipients = curl_slist_append(recipients, CC_ADDR);
        curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

        for(cpp = headers_text; *cpp; cpp++)
            headers = curl_slist_append(headers, *cpp);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        mime = curl_mime_init(curl);

        alt = curl_mime_init(curl);

        /* Text message. */
        part = curl_mime_addpart(alt);
        curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED);
        part = curl_mime_addpart(mime);
        curl_mime_subparts(part, alt);
        curl_mime_type(part, "multipart/alternative");
        slist = curl_slist_append(NULL, "Content-Disposition: inline");
        curl_mime_headers(part, slist, 1);
        
        /* File */
        std::string attachment = "D:/report.zip";
        part = curl_mime_addpart(mime);
        curl_mime_type(part, "application/zip");
        curl_mime_filedata(part, attachment.c_str());
        curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);

        res = curl_easy_perform(curl);

        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));

        curl_slist_free_all(recipients);
        curl_slist_free_all(headers);

        curl_easy_cleanup(curl);

        curl_mime_free(mime);
    }

    return (int)res;
}

你能帮我弄明白怎么回事吗?压缩包在电子邮件中,但下载后无法打开,因为已损坏。

谢谢!

【问题讨论】:

    标签: c++ email curl attachment


    【解决方案1】:

    我在发送 jpeg 文件时遇到了类似的问题,我可以通过使用 curl_mime_encoder 对数据进行编码来解决它。

    curl_mime_filedata(part, attachment.c_str());
    curl_mime_encoder(part, "base64");
    

    也许这也适用于您的情况。

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2016-11-25
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多