CURLOPT_UPLOAD_FLAGS(3)
okay bestie, welcome to CURLOPT_UPLOAD_FLAGS(3) β the manual page for upload flags for IMAP, and it's literally giving niche-but-iconic π
π NAME π
CURLOPT_UPLOAD_FLAGS - upload flags for IMAP. That's the name, that's the vibe, and yes it's all about IMAP uploads π
β¨ SYNOPSIS β¨
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_FLAGS, long bitmask);
no cap, that's the whole signature π«Ά
π DESCRIPTION π
okay so you pass a long as the parameter, and it gets set to a bitmask. This bitmask tells libcurl which flags to send the server relating to uploaded files. The currently supported flags are:
CURLULFLAG_ANSWEREDβ sets the Answered flag for IMAP uploads. Indicates that the message has been replied to πCURLULFLAG_DELETEDβ sets the Deleted flag for IMAP uploads. Marks the message for deletion rather than immediately removing it. very "it's not gone yet, it's just on notice" energy πCURLULFLAG_DRAFTβ sets the Draft flag for IMAP uploads. Marks the message as an uncompleted composition πCURLULFLAG_FLAGGEDβ sets the Flagged flag for IMAP uploads. Marks the message for special attention. main character message behavior πCURLULFLAG_SEENβ sets the Seen flag for IMAP uploads. Marks the message as read π
πΈ DEFAULT πΈ
A bitmask with only the CURLULFLAG_SEEN flag set. so yes, seen is the default vibe, periodt β¨
π¦ PROTOCOLS π¦
This functionality affects imap and imaps. literally those two π¦
π EXAMPLE π
here's the example, and it's lowkey a whole meal β code is copied exactly, so don't @ me π«Ά
static size_t read_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
{
FILE *src = userdata;
/* copy as much data as possible into the 'ptr' buffer, but no more than
'size' * 'nmemb' bytes */
size_t retcode = fread(ptr, size, nmemb, src);
return retcode;
}
int main(void)
{
CURL *curl;
FILE *src = fopen("local-file", "r");
if(!src)
return 1;
curl = curl_easy_init();
if(curl) {
CURLcode result;
curl_off_t fsize = 9876; /* set this to the size of the input file */
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
/* enable uploading */
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
/* specify target */
curl_easy_setopt(curl, CURLOPT_URL, "imap://example.com:993/mailbox");
/* provide username */
curl_easy_setopt(curl, CURLOPT_USERNAME, "user@example.com");
/* provide password */
curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");
/* specify that uploaded mail should be considered flagged */
curl_easy_setopt(curl, CURLOPT_UPLOAD_FLAGS, CURLULFLAG_FLAGGED);
/* now specify which pointer to pass to our callback */
curl_easy_setopt(curl, CURLOPT_READDATA, src);
/* Set the size of the file to upload */
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
/* perform the upload */
result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
fclose(src);
}
π AVAILABILITY π
Added in curl 8.13.0 β noted, bestie β
π RETURN VALUE π
curl_easy_setopt(3) returns a CURLcode indicating success or error.
CURLE_OK (0) means everything was OK, non-zero means an error occurred, see libcurl-errors(3). so if it's not 0, go peek at that page, iykyk π
π SEE ALSO π
CURLOPT_UPLOAD(3)β the related page to check out, fr fr π«Ά
okay that's the whole page, bestie β brought to you by libcurl and dated 2026-10-25, and this manual page is CURLOPT_UPLOAD_FLAGS(3). mwah πβ¨
π¦ where this page comes from
- alpine 3.23: curl-doc 8.23.0-r0 Β· curl
- alpine 3.24: curl-doc 8.23.0-r0 Β· curl
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms