<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="gmail_v1.html">Gmail API</a> . <a href="gmail_v1.users.html">users</a> . <a href="gmail_v1.users.drafts.html">drafts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(userId, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</a></code></p>
<p class="firstline">Creates a new draft with the `DRAFT` label.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Immediately and permanently deletes the specified draft. Does not simply trash it.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, id, format=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified draft.</p>
<p class="toc_element">
  <code><a href="#list">list(userId, maxResults=None, q=None, includeSpamTrash=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the drafts in the user's mailbox.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#send">send(userId, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</a></code></p>
<p class="firstline">Sends the specified, existing draft to the recipients in the `To`, `Cc`, and `Bcc` headers.</p>
<p class="toc_element">
  <code><a href="#update">update(userId, id, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</a></code></p>
<p class="firstline">Replaces a draft's content.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(userId, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</code>
  <pre>Creates a new draft with the `DRAFT` label.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  body: object, The request body.
    The object takes the form of:

{ # A draft email in the user&#x27;s mailbox.
    &quot;message&quot;: { # An email message. # The message content of the draft.
      &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
      &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
        &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
          # Object with schema name: MessagePart
        ],
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
        &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
        &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
        &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
          {
            &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
            &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
          },
        ],
        &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
          &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
          &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
          &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
        },
      },
      &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
        &quot;A String&quot;,
      ],
      &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
      &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
      &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
      &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
      &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
    },
    &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # A draft email in the user&#x27;s mailbox.
      &quot;message&quot;: { # An email message. # The message content of the draft.
        &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
        &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
          &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
            # Object with schema name: MessagePart
          ],
          &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
          &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
          &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
          &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
            {
              &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
              &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
            },
          ],
          &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
            &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
            &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
            &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
          },
        },
        &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
          &quot;A String&quot;,
        ],
        &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
        &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
        &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
        &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
        &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
        &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
      },
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, id, x__xgafv=None)</code>
  <pre>Immediately and permanently deletes the specified draft. Does not simply trash it.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  id: string, The ID of the draft to delete. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, id, format=None, x__xgafv=None)</code>
  <pre>Gets the specified draft.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  id: string, The ID of the draft to retrieve. (required)
  format: string, The format to return the draft in.
    Allowed values
      minimal - Returns only email message ID and labels; does not return the email headers, body, or payload.
      full - Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.
      raw - Returns the full email message data with body content in the `raw` field as a base64url encoded string; the `payload` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.
      metadata - Returns only email message ID, labels, and email headers.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A draft email in the user&#x27;s mailbox.
      &quot;message&quot;: { # An email message. # The message content of the draft.
        &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
        &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
          &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
            # Object with schema name: MessagePart
          ],
          &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
          &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
          &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
          &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
            {
              &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
              &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
            },
          ],
          &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
            &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
            &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
            &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
          },
        },
        &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
          &quot;A String&quot;,
        ],
        &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
        &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
        &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
        &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
        &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
        &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
      },
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId, maxResults=None, q=None, includeSpamTrash=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the drafts in the user&#x27;s mailbox.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  maxResults: integer, Maximum number of drafts to return.
  q: string, Only return draft messages matching the specified query. Supports the same query format as the Gmail search box. For example, `&quot;from:someuser@example.com rfc822msgid: is:unread&quot;`.
  includeSpamTrash: boolean, Include drafts from `SPAM` and `TRASH` in the results.
  pageToken: string, Page token to retrieve a specific page of results in the list.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results in the list.
    &quot;drafts&quot;: [ # List of drafts. Note that the `Message` property in each `Draft` resource only contains an `id` and a `threadId`. The messages.get method can fetch additional message details.
      { # A draft email in the user&#x27;s mailbox.
          &quot;message&quot;: { # An email message. # The message content of the draft.
            &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
            &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
              &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
                # Object with schema name: MessagePart
              ],
              &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
              &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
              &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
              &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
                {
                  &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
                  &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
                },
              ],
              &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
                &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
                &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
              },
            },
            &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
              &quot;A String&quot;,
            ],
            &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
            &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
            &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
            &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
            &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
            &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
          },
          &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
        },
    ],
    &quot;resultSizeEstimate&quot;: 42, # Estimated total number of results.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="send">send(userId, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</code>
  <pre>Sends the specified, existing draft to the recipients in the `To`, `Cc`, and `Bcc` headers.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  body: object, The request body.
    The object takes the form of:

{ # A draft email in the user&#x27;s mailbox.
    &quot;message&quot;: { # An email message. # The message content of the draft.
      &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
      &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
        &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
          # Object with schema name: MessagePart
        ],
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
        &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
        &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
        &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
          {
            &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
            &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
          },
        ],
        &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
          &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
          &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
          &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
        },
      },
      &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
        &quot;A String&quot;,
      ],
      &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
      &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
      &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
      &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
      &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
    },
    &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # An email message.
    &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
    &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
      &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
        # Object with schema name: MessagePart
      ],
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
      &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
      &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
      &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
        {
          &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
          &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
        },
      ],
      &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
        &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
        &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
        &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
      },
    },
    &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
      &quot;A String&quot;,
    ],
    &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
    &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
    &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
    &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
    &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
    &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(userId, id, body=None, x__xgafv=None, media_body=None, media_mime_type=None)</code>
  <pre>Replaces a draft&#x27;s content.

Args:
  userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
  id: string, The ID of the draft to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # A draft email in the user&#x27;s mailbox.
    &quot;message&quot;: { # An email message. # The message content of the draft.
      &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
      &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
        &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
          # Object with schema name: MessagePart
        ],
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
        &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
        &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
        &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
          {
            &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
            &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
          },
        ],
        &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
          &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
          &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
          &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
        },
      },
      &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
        &quot;A String&quot;,
      ],
      &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
      &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
      &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
      &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
      &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
    },
    &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # A draft email in the user&#x27;s mailbox.
      &quot;message&quot;: { # An email message. # The message content of the draft.
        &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
        &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
          &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.
            # Object with schema name: MessagePart
          ],
          &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
          &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
          &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part represents an attachment.
          &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.
            {
              &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example, `someuser@example.com`.
              &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For example, `To`.
            },
          ],
          &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for container MIME message parts.
            &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.
            &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
            &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.
          },
        },
        &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
          &quot;A String&quot;,
        ],
        &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.
        &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
        &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
        &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.
        &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
        &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match.
      },
      &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the draft.
    }</pre>
</div>

</body></html>