---
name: "CURLOPT_MIMEPOST"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/CURLOPT_MIMEPOST"
---

# CURLOPT\_MIMEPOST(3)

send data from mime structure

## NAME

CURLOPT\_MIMEPOST - send data from mime structure

## SYNOPSIS

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

## DESCRIPTION

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

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)](/CURLOPT_HTTPPOST/3.md)* option.

When setting *[CURLOPT\_MIMEPOST(3)](/CURLOPT_MIMEPOST/3.md)* 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

This functionality affects http, imap and smtp

## 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

Added in curl 7.56.0

## RETURN VALUE

This returns CURLE\_OK.

## SEE ALSO

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