curl\_mime\_subparts(3) Library Functions Manual curl\_mime\_subparts(3)

# [NAME](#NAME)

curl\_mime\_subparts - set sub-parts of a multipart mime part

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts);
```

# [DESCRIPTION](#DESCRIPTION)

[*curl\_mime\_subparts(3)*](/man/os/curl/curl_mime_subparts.3) sets a multipart mime part's content from a mime structure.

*part* is a handle to the multipart part.

*subparts* is a mime structure handle holding the sub-parts. After [*curl\_mime\_subparts(3)*](/man/os/curl/curl_mime_subparts.3) succeeds, the mime structure handle belongs to the multipart part and must not be freed explicitly. It may however be updated by subsequent calls to mime API functions.

Setting a part's contents multiple times is valid: only the value set by the last call is retained. It is possible to unassign previous part's contents by setting *subparts* to NULL.

# [PROTOCOLS](#PROTOCOLS)

This functionality affects http, imap and smtp

# [EXAMPLE](#EXAMPLE)

```
static const char *inline_html = "<title>example</title>";
static const char *inline_text = "once upon the time";
int main(void)
{


  CURL *curl = curl_easy_init();


  if(curl) {


    struct curl_slist *slist;


    /* The inline part is an alternative proposing the html and the text


       versions of the email. */


    curl_mime *alt = curl_mime_init(curl);


    curl_mimepart *part;


    /* HTML message. */


    part = curl_mime_addpart(alt);


    curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED);


    curl_mime_type(part, "text/html");


    /* Text message. */


    part = curl_mime_addpart(alt);


    curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED);


    /* Create the inline part. */


    part = curl_mime_addpart(alt);


    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);


  }
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.56.0

# [RETURN VALUE](#RETURN_VALUE)

This function returns a CURLcode indicating success or error.

CURLE\_OK (0) means everything was OK, non-zero means an error occurred, see [*libcurl-errors(3)*](/man/os/curl/libcurl-errors.3). If [*CURLOPT\_ERRORBUFFER(3)*](/man/os/curl/CURLOPT_ERRORBUFFER.3) was set with [*curl\_easy\_setopt(3)*](/man/os/curl/curl_easy_setopt.3) there can be an error message stored in the error buffer when non-zero is returned.

# [SEE ALSO](#SEE_ALSO)

[**curl\_mime\_addpart**(3)](/man/os/curl/curl_mime_addpart.3), [**curl\_mime\_init**(3)](/man/os/curl/curl_mime_init.3)

2026-10-01 libcurl

---

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