<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.settings.html">settings</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="gmail_v1.users.settings.delegates.html">delegates()</a></code>
</p>
<p class="firstline">Returns the delegates Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.settings.filters.html">filters()</a></code>
</p>
<p class="firstline">Returns the filters Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.settings.forwardingAddresses.html">forwardingAddresses()</a></code>
</p>
<p class="firstline">Returns the forwardingAddresses Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.settings.sendAs.html">sendAs()</a></code>
</p>
<p class="firstline">Returns the sendAs Resource.</p>

<p class="toc_element">
  <code><a href="#getAutoForwarding">getAutoForwarding(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the auto-forwarding setting for the specified account.</p>
<p class="toc_element">
  <code><a href="#getImap">getImap(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets IMAP settings.</p>
<p class="toc_element">
  <code><a href="#getLanguage">getLanguage(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets language settings.</p>
<p class="toc_element">
  <code><a href="#getPop">getPop(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets POP settings.</p>
<p class="toc_element">
  <code><a href="#getVacation">getVacation(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets vacation responder settings.</p>
<p class="toc_element">
  <code><a href="#updateAutoForwarding">updateAutoForwarding(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the auto-forwarding setting for the specified account.  A verified</p>
<p class="toc_element">
  <code><a href="#updateImap">updateImap(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates IMAP settings.</p>
<p class="toc_element">
  <code><a href="#updateLanguage">updateLanguage(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates language settings.</p>
<p class="toc_element">
  <code><a href="#updatePop">updatePop(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates POP settings.</p>
<p class="toc_element">
  <code><a href="#updateVacation">updateVacation(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates vacation responder settings.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getAutoForwarding">getAutoForwarding(userId, x__xgafv=None)</code>
  <pre>Gets the auto-forwarding setting for the specified account.

Args:
  userId: string, User&#x27;s email address.  The special value &quot;me&quot;
can be used to indicate the authenticated user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
      &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
      &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
      &quot;emailAddress&quot;: &quot;A String&quot;, # Email address to which all incoming messages are forwarded.  This email
          # address must be a verified member of the forwarding addresses.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getImap">getImap(userId, x__xgafv=None)</code>
  <pre>Gets IMAP settings.

Args:
  userId: string, User&#x27;s email address.  The special value &quot;me&quot;
can be used to indicate the authenticated user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # IMAP settings for an account.
      &quot;maxFolderSize&quot;: 42, # An optional limit on the number of messages that an IMAP folder may
          # contain.  Legal values are 0, 1000, 2000, 5000 or 10000.  A value of zero
          # is interpreted to mean that there is no limit.
      &quot;autoExpunge&quot;: True or False, # If this value is true, Gmail will immediately expunge a message when it is
          # marked as deleted in IMAP.  Otherwise, Gmail will wait for an update from
          # the client before expunging messages marked as deleted.
      &quot;expungeBehavior&quot;: &quot;A String&quot;, # The action that will be executed on a message when it is marked as deleted
          # and expunged from the last visible IMAP folder.
      &quot;enabled&quot;: True or False, # Whether IMAP is enabled for the account.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getLanguage">getLanguage(userId, x__xgafv=None)</code>
  <pre>Gets language settings.

Args:
  userId: string, User&#x27;s email address.  The special value &quot;me&quot;
can be used to indicate the authenticated user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Language settings for an account. These settings correspond to
      # the &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;&quot;Language
      # settings&quot;&lt;/a&gt; feature in the web interface.
    &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an
        # &lt;a href=&quot;https://www.w3.org/International/articles/language-tags/&quot;&gt;RFC 3066
        # Language Tag&lt;/a&gt; (for example `en-GB`, `fr` or
        # `ja` for British English, French, or Japanese respectively).
        #
        # The set of languages supported by Gmail evolves over time, so please refer
        # to the &quot;Language&quot; dropdown in the
        # &lt;a href=&quot;https://mail.google.com/mail/u/0/#settings/general&quot;&gt;Gmail settings
        # &lt;/a&gt; for all available options, as described in the
        # &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;language settings
        # help article&lt;/a&gt;. A table of sample values is also provided in the
        # &lt;a href=&quot;/gmail/api/guides/language_settings#display_language&quot;&gt;Managing
        # Language Settings guide&lt;/a&gt;
        #
        # Not all Gmail clients can display the same set of languages. In the case
        # that a user&#x27;s display language is not available for use on a particular
        # client, said client automatically chooses to display in the closest
        # supported variant (or a reasonable default).
  }</pre>
</div>

<div class="method">
    <code class="details" id="getPop">getPop(userId, x__xgafv=None)</code>
  <pre>Gets POP settings.

Args:
  userId: string, User&#x27;s email address.  The special value &quot;me&quot;
can be used to indicate the authenticated user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # POP settings for an account.
    &quot;disposition&quot;: &quot;A String&quot;, # The action that will be executed on a message after it has been fetched via
        # POP.
    &quot;accessWindow&quot;: &quot;A String&quot;, # The range of messages which are accessible via POP.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getVacation">getVacation(userId, x__xgafv=None)</code>
  <pre>Gets vacation responder settings.

Args:
  userId: string, User&#x27;s email address.  The special value &quot;me&quot;
can be used to indicate the authenticated user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Vacation auto-reply settings for an account.  These settings correspond to
      # the &lt;a href=&quot;https://support.google.com/mail/answer/25922&quot;&gt;&quot;Vacation
      # responder&quot;&lt;/a&gt; feature in the web interface.
    &quot;startTime&quot;: &quot;A String&quot;, # An optional start time for sending auto-replies (epoch ms).
        # When this is specified, Gmail will automatically reply only to messages
        # that it receives after the start time.  If both `startTime` and
        # `endTime` are specified, `startTime` must precede
        # `endTime`.
    &quot;endTime&quot;: &quot;A String&quot;, # An optional end time for sending auto-replies (epoch ms).
        # When this is specified, Gmail will automatically reply only to messages
        # that it receives before the end time.  If both `startTime` and
        # `endTime` are specified, `startTime` must precede
        # `endTime`.
    &quot;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format.  Gmail will sanitize the HTML before
        # storing it. If both `response_body_plain_text` and
        # `response_body_html` are specified,
        # `response_body_html` will be used.
    &quot;responseSubject&quot;: &quot;A String&quot;, # Optional text to prepend to the subject line in vacation responses.  In
        # order to enable auto-replies, either the response subject or the response
        # body must be nonempty.
    &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format. If both
        # `response_body_plain_text` and `response_body_html`
        # are specified, `response_body_html` will be used.
    &quot;restrictToContacts&quot;: True or False, # Flag that determines whether responses are sent to recipients who are not
        # in the user&#x27;s list of contacts.
    &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
    &quot;restrictToDomain&quot;: True or False, # Flag that determines whether responses are sent to recipients who are
        # outside of the user&#x27;s domain. This feature is only available for G Suite
        # users.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateAutoForwarding">updateAutoForwarding(userId, body=None, x__xgafv=None)</code>
  <pre>Updates the auto-forwarding setting for the specified account.  A verified
forwarding address must be specified when auto-forwarding is enabled.

This method is only available to service account clients that have been
delegated domain-wide authority.

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

{ # Auto-forwarding settings for an account.
    &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
    &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
    &quot;emailAddress&quot;: &quot;A String&quot;, # Email address to which all incoming messages are forwarded.  This email
        # address must be a verified member of the forwarding addresses.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
      &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
      &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
      &quot;emailAddress&quot;: &quot;A String&quot;, # Email address to which all incoming messages are forwarded.  This email
          # address must be a verified member of the forwarding addresses.
    }</pre>
</div>

<div class="method">
    <code class="details" id="updateImap">updateImap(userId, body=None, x__xgafv=None)</code>
  <pre>Updates IMAP settings.

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

{ # IMAP settings for an account.
    &quot;maxFolderSize&quot;: 42, # An optional limit on the number of messages that an IMAP folder may
        # contain.  Legal values are 0, 1000, 2000, 5000 or 10000.  A value of zero
        # is interpreted to mean that there is no limit.
    &quot;autoExpunge&quot;: True or False, # If this value is true, Gmail will immediately expunge a message when it is
        # marked as deleted in IMAP.  Otherwise, Gmail will wait for an update from
        # the client before expunging messages marked as deleted.
    &quot;expungeBehavior&quot;: &quot;A String&quot;, # The action that will be executed on a message when it is marked as deleted
        # and expunged from the last visible IMAP folder.
    &quot;enabled&quot;: True or False, # Whether IMAP is enabled for the account.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # IMAP settings for an account.
      &quot;maxFolderSize&quot;: 42, # An optional limit on the number of messages that an IMAP folder may
          # contain.  Legal values are 0, 1000, 2000, 5000 or 10000.  A value of zero
          # is interpreted to mean that there is no limit.
      &quot;autoExpunge&quot;: True or False, # If this value is true, Gmail will immediately expunge a message when it is
          # marked as deleted in IMAP.  Otherwise, Gmail will wait for an update from
          # the client before expunging messages marked as deleted.
      &quot;expungeBehavior&quot;: &quot;A String&quot;, # The action that will be executed on a message when it is marked as deleted
          # and expunged from the last visible IMAP folder.
      &quot;enabled&quot;: True or False, # Whether IMAP is enabled for the account.
    }</pre>
</div>

<div class="method">
    <code class="details" id="updateLanguage">updateLanguage(userId, body=None, x__xgafv=None)</code>
  <pre>Updates language settings.

If successful, the return object contains the `displayLanguage`
that was saved for the user, which may differ from the value passed into
the request. This is because the requested `displayLanguage` may
not be directly supported by Gmail but have a close variant that is, and so
the variant may be chosen and saved instead.

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

{ # Language settings for an account. These settings correspond to
    # the &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;&quot;Language
    # settings&quot;&lt;/a&gt; feature in the web interface.
  &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an
      # &lt;a href=&quot;https://www.w3.org/International/articles/language-tags/&quot;&gt;RFC 3066
      # Language Tag&lt;/a&gt; (for example `en-GB`, `fr` or
      # `ja` for British English, French, or Japanese respectively).
      # 
      # The set of languages supported by Gmail evolves over time, so please refer
      # to the &quot;Language&quot; dropdown in the
      # &lt;a href=&quot;https://mail.google.com/mail/u/0/#settings/general&quot;&gt;Gmail settings
      # &lt;/a&gt; for all available options, as described in the
      # &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;language settings
      # help article&lt;/a&gt;. A table of sample values is also provided in the
      # &lt;a href=&quot;/gmail/api/guides/language_settings#display_language&quot;&gt;Managing
      # Language Settings guide&lt;/a&gt;
      # 
      # Not all Gmail clients can display the same set of languages. In the case
      # that a user&#x27;s display language is not available for use on a particular
      # client, said client automatically chooses to display in the closest
      # supported variant (or a reasonable default).
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Language settings for an account. These settings correspond to
      # the &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;&quot;Language
      # settings&quot;&lt;/a&gt; feature in the web interface.
    &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an
        # &lt;a href=&quot;https://www.w3.org/International/articles/language-tags/&quot;&gt;RFC 3066
        # Language Tag&lt;/a&gt; (for example `en-GB`, `fr` or
        # `ja` for British English, French, or Japanese respectively).
        #
        # The set of languages supported by Gmail evolves over time, so please refer
        # to the &quot;Language&quot; dropdown in the
        # &lt;a href=&quot;https://mail.google.com/mail/u/0/#settings/general&quot;&gt;Gmail settings
        # &lt;/a&gt; for all available options, as described in the
        # &lt;a href=&quot;https://support.google.com/mail/answer/17091&quot;&gt;language settings
        # help article&lt;/a&gt;. A table of sample values is also provided in the
        # &lt;a href=&quot;/gmail/api/guides/language_settings#display_language&quot;&gt;Managing
        # Language Settings guide&lt;/a&gt;
        #
        # Not all Gmail clients can display the same set of languages. In the case
        # that a user&#x27;s display language is not available for use on a particular
        # client, said client automatically chooses to display in the closest
        # supported variant (or a reasonable default).
  }</pre>
</div>

<div class="method">
    <code class="details" id="updatePop">updatePop(userId, body=None, x__xgafv=None)</code>
  <pre>Updates POP settings.

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

{ # POP settings for an account.
  &quot;disposition&quot;: &quot;A String&quot;, # The action that will be executed on a message after it has been fetched via
      # POP.
  &quot;accessWindow&quot;: &quot;A String&quot;, # The range of messages which are accessible via POP.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # POP settings for an account.
    &quot;disposition&quot;: &quot;A String&quot;, # The action that will be executed on a message after it has been fetched via
        # POP.
    &quot;accessWindow&quot;: &quot;A String&quot;, # The range of messages which are accessible via POP.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateVacation">updateVacation(userId, body=None, x__xgafv=None)</code>
  <pre>Updates vacation responder settings.

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

{ # Vacation auto-reply settings for an account.  These settings correspond to
    # the &lt;a href=&quot;https://support.google.com/mail/answer/25922&quot;&gt;&quot;Vacation
    # responder&quot;&lt;/a&gt; feature in the web interface.
  &quot;startTime&quot;: &quot;A String&quot;, # An optional start time for sending auto-replies (epoch ms).
      # When this is specified, Gmail will automatically reply only to messages
      # that it receives after the start time.  If both `startTime` and
      # `endTime` are specified, `startTime` must precede
      # `endTime`.
  &quot;endTime&quot;: &quot;A String&quot;, # An optional end time for sending auto-replies (epoch ms).
      # When this is specified, Gmail will automatically reply only to messages
      # that it receives before the end time.  If both `startTime` and
      # `endTime` are specified, `startTime` must precede
      # `endTime`.
  &quot;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format.  Gmail will sanitize the HTML before
      # storing it. If both `response_body_plain_text` and
      # `response_body_html` are specified,
      # `response_body_html` will be used.
  &quot;responseSubject&quot;: &quot;A String&quot;, # Optional text to prepend to the subject line in vacation responses.  In
      # order to enable auto-replies, either the response subject or the response
      # body must be nonempty.
  &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format. If both
      # `response_body_plain_text` and `response_body_html`
      # are specified, `response_body_html` will be used.
  &quot;restrictToContacts&quot;: True or False, # Flag that determines whether responses are sent to recipients who are not
      # in the user&#x27;s list of contacts.
  &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
  &quot;restrictToDomain&quot;: True or False, # Flag that determines whether responses are sent to recipients who are
      # outside of the user&#x27;s domain. This feature is only available for G Suite
      # users.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Vacation auto-reply settings for an account.  These settings correspond to
      # the &lt;a href=&quot;https://support.google.com/mail/answer/25922&quot;&gt;&quot;Vacation
      # responder&quot;&lt;/a&gt; feature in the web interface.
    &quot;startTime&quot;: &quot;A String&quot;, # An optional start time for sending auto-replies (epoch ms).
        # When this is specified, Gmail will automatically reply only to messages
        # that it receives after the start time.  If both `startTime` and
        # `endTime` are specified, `startTime` must precede
        # `endTime`.
    &quot;endTime&quot;: &quot;A String&quot;, # An optional end time for sending auto-replies (epoch ms).
        # When this is specified, Gmail will automatically reply only to messages
        # that it receives before the end time.  If both `startTime` and
        # `endTime` are specified, `startTime` must precede
        # `endTime`.
    &quot;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format.  Gmail will sanitize the HTML before
        # storing it. If both `response_body_plain_text` and
        # `response_body_html` are specified,
        # `response_body_html` will be used.
    &quot;responseSubject&quot;: &quot;A String&quot;, # Optional text to prepend to the subject line in vacation responses.  In
        # order to enable auto-replies, either the response subject or the response
        # body must be nonempty.
    &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format. If both
        # `response_body_plain_text` and `response_body_html`
        # are specified, `response_body_html` will be used.
    &quot;restrictToContacts&quot;: True or False, # Flag that determines whether responses are sent to recipients who are not
        # in the user&#x27;s list of contacts.
    &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
    &quot;restrictToDomain&quot;: True or False, # Flag that determines whether responses are sent to recipients who are
        # outside of the user&#x27;s domain. This feature is only available for G Suite
        # users.
  }</pre>
</div>

</body></html>