CURLOPT\_MIMEPOST(3) Library Functions Manual CURLOPT\_MIMEPOST(3)

# [NAME](#NAME)

CURLOPT\_MIMEPOST - send data from mime structure

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
curl_mime *mime;
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MIMEPOST, mime);
```

# [DESCRIPTION](#DESCRIPTION)

Pass a mime handle previously obtained from [*curl\_mime\_init(3)*](/man/os/curl/curl_mime_init.3).

This setting is supported by the HTTP protocol to post forms and by the SMTP and IMAP protocols to provide the email data to send/upload.

This option is the preferred way of posting an HTTP form, replacing and extending the [*CURLOPT\_HTTPPOST(3)*](/man/os/curl/CURLOPT_HTTPPOST.3) option.

When setting [*CURLOPT\_MIMEPOST(3)*](/man/os/curl/CURLOPT_MIMEPOST.3) to NULL, libcurl resets the request type for HTTP to the default to disable the POST. Typically that would mean it is reset to GET. Instead you should set a desired request method explicitly.

# [PROTOCOLS](#PROTOCOLS)

This functionality affects http, imap and smtp

# [EXAMPLE](#EXAMPLE)

```
int main(void)
{


  CURL *curl = curl_easy_init();


  if(curl) {


    curl_mime *multipart = curl_mime_init(curl);


    if(multipart) {


      CURLcode result;


      curl_mimepart *part = curl_mime_addpart(multipart);


      curl_mime_name(part, "name");


      curl_mime_data(part, "daniel", CURL_ZERO_TERMINATED);


      part = curl_mime_addpart(multipart);


      curl_mime_name(part, "project");


      curl_mime_data(part, "curl", CURL_ZERO_TERMINATED);


      part = curl_mime_addpart(multipart);


      curl_mime_name(part, "logotype-image");


      curl_mime_filedata(part, "curl.png");


      /* Set the form info */


      curl_easy_setopt(curl, CURLOPT_MIMEPOST, multipart);


      result = curl_easy_perform(curl); /* post away */


      curl_mime_free(multipart); /* free the post data */


    }


    curl_easy_cleanup(curl);


  }
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.56.0

# [RETURN VALUE](#RETURN_VALUE)

This returns CURLE\_OK.

# [SEE ALSO](#SEE_ALSO)

[**CURLOPT\_HTTPPOST**(3)](/man/os/curl/CURLOPT_HTTPPOST.3), [**CURLOPT\_POSTFIELDS**(3)](/man/os/curl/CURLOPT_POSTFIELDS.3), [**CURLOPT\_PUT**(3)](/man/os/curl/CURLOPT_PUT.3), [**curl\_mime\_init**(3)](/man/os/curl/curl_mime_init.3)

2026-10-01 libcurl

---

Document: CURLOPT_MIMEPOST(3) from curl 8.22.0-r4 (Chainguard OS)
Source: https://github.com/curl/curl.git
