<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's email address.  The special value "me"
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.
    "emailAddress": "A String", # Email address to which all incoming messages are forwarded.  This email
        # address must be a verified member of the forwarding addresses.
    "enabled": True or False, # Whether all incoming mail is automatically forwarded to another address.
    "disposition": "A String", # The state that a message should be left in after it has been forwarded.
  }</pre>
</div>

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

Args:
  userId: string, User's email address.  The special value "me"
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.
      "maxFolderSize": 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.
      "autoExpunge": 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.
      "enabled": True or False, # Whether IMAP is enabled for the account.
      "expungeBehavior": "A String", # The action that will be executed on a message when it is marked as deleted
          # and expunged from the last visible IMAP folder.
    }</pre>
</div>

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

Args:
  userId: string, User's email address.  The special value "me"
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="https://support.google.com/mail/answer/17091"&gt;"Language
        # settings"&lt;/a&gt; feature in the web interface.
      "displayLanguage": "A String", # The language to display Gmail in, formatted as an
          # &lt;a href="https://www.w3.org/International/articles/language-tags/"&gt;RFC 3066
          # Language Tag&lt;/a&gt; (for example &lt;code&gt;en-GB&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt; or
          # &lt;code&gt;ja&lt;/code&gt; for British English, French, or Japanese respectively).
          #
          # The set of languages supported by Gmail evolves over time, so please refer
          # to the "Language" dropdown in the
          # &lt;a href="https://mail.google.com/mail/u/0/#settings/general"&gt;Gmail settings
          # &lt;/a&gt; for all available options, as described in the
          # &lt;a href="https://support.google.com/mail/answer/17091"&gt;language settings
          # help article&lt;/a&gt;. A table of sample values is also provided in the
          # &lt;a href="/gmail/api/guides/language_settings#display_language"&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'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's email address.  The special value "me"
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.
    "disposition": "A String", # The action that will be executed on a message after it has been fetched via
        # POP.
    "accessWindow": "A String", # 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's email address.  The special value "me"
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="https://support.google.com/mail/answer/25922"&gt;"Vacation
        # responder"&lt;/a&gt; feature in the web interface.
      "responseSubject": "A String", # 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.
      "responseBodyPlainText": "A String", # Response body in plain text format.
      "restrictToContacts": True or False, # Flag that determines whether responses are sent to recipients who are not
          # in the user's list of contacts.
      "enableAutoReply": True or False, # Flag that controls whether Gmail automatically replies to messages.
      "startTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
          # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
          # &lt;code&gt;endTime&lt;/code&gt;.
      "endTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
          # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
          # &lt;code&gt;endTime&lt;/code&gt;.
      "responseBodyHtml": "A String", # Response body in HTML format.  Gmail will sanitize the HTML before
          # storing it.
      "restrictToDomain": True or False, # Flag that determines whether responses are sent to recipients who are
          # outside of the user'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'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:

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

  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.
    "emailAddress": "A String", # Email address to which all incoming messages are forwarded.  This email
        # address must be a verified member of the forwarding addresses.
    "enabled": True or False, # Whether all incoming mail is automatically forwarded to another address.
    "disposition": "A String", # The state that a message should be left in after it has been forwarded.
  }</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'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:

{ # IMAP settings for an account.
    "maxFolderSize": 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.
    "autoExpunge": 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.
    "enabled": True or False, # Whether IMAP is enabled for the account.
    "expungeBehavior": "A String", # The action that will be executed on a message when it is marked as deleted
        # and expunged from the last visible IMAP folder.
  }

  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.
      "maxFolderSize": 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.
      "autoExpunge": 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.
      "enabled": True or False, # Whether IMAP is enabled for the account.
      "expungeBehavior": "A String", # The action that will be executed on a message when it is marked as deleted
          # and expunged from the last visible IMAP folder.
    }</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 &lt;code&gt;displayLanguage&lt;/code&gt;
that was saved for the user, which may differ from the value passed into
the request. This is because the requested &lt;code&gt;displayLanguage&lt;/code&gt; 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'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:

{ # Language settings for an account. These settings correspond to
      # the &lt;a href="https://support.google.com/mail/answer/17091"&gt;"Language
      # settings"&lt;/a&gt; feature in the web interface.
    "displayLanguage": "A String", # The language to display Gmail in, formatted as an
        # &lt;a href="https://www.w3.org/International/articles/language-tags/"&gt;RFC 3066
        # Language Tag&lt;/a&gt; (for example &lt;code&gt;en-GB&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt; or
        # &lt;code&gt;ja&lt;/code&gt; for British English, French, or Japanese respectively).
        # 
        # The set of languages supported by Gmail evolves over time, so please refer
        # to the "Language" dropdown in the
        # &lt;a href="https://mail.google.com/mail/u/0/#settings/general"&gt;Gmail settings
        # &lt;/a&gt; for all available options, as described in the
        # &lt;a href="https://support.google.com/mail/answer/17091"&gt;language settings
        # help article&lt;/a&gt;. A table of sample values is also provided in the
        # &lt;a href="/gmail/api/guides/language_settings#display_language"&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'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="https://support.google.com/mail/answer/17091"&gt;"Language
        # settings"&lt;/a&gt; feature in the web interface.
      "displayLanguage": "A String", # The language to display Gmail in, formatted as an
          # &lt;a href="https://www.w3.org/International/articles/language-tags/"&gt;RFC 3066
          # Language Tag&lt;/a&gt; (for example &lt;code&gt;en-GB&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt; or
          # &lt;code&gt;ja&lt;/code&gt; for British English, French, or Japanese respectively).
          #
          # The set of languages supported by Gmail evolves over time, so please refer
          # to the "Language" dropdown in the
          # &lt;a href="https://mail.google.com/mail/u/0/#settings/general"&gt;Gmail settings
          # &lt;/a&gt; for all available options, as described in the
          # &lt;a href="https://support.google.com/mail/answer/17091"&gt;language settings
          # help article&lt;/a&gt;. A table of sample values is also provided in the
          # &lt;a href="/gmail/api/guides/language_settings#display_language"&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'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'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:

{ # POP settings for an account.
  "disposition": "A String", # The action that will be executed on a message after it has been fetched via
      # POP.
  "accessWindow": "A String", # 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.
    "disposition": "A String", # The action that will be executed on a message after it has been fetched via
        # POP.
    "accessWindow": "A String", # 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'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:

{ # Vacation auto-reply settings for an account.  These settings correspond to
      # the &lt;a href="https://support.google.com/mail/answer/25922"&gt;"Vacation
      # responder"&lt;/a&gt; feature in the web interface.
    "responseSubject": "A String", # 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.
    "responseBodyPlainText": "A String", # Response body in plain text format.
    "restrictToContacts": True or False, # Flag that determines whether responses are sent to recipients who are not
        # in the user's list of contacts.
    "enableAutoReply": True or False, # Flag that controls whether Gmail automatically replies to messages.
    "startTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
        # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
        # &lt;code&gt;endTime&lt;/code&gt;.
    "endTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
        # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
        # &lt;code&gt;endTime&lt;/code&gt;.
    "responseBodyHtml": "A String", # Response body in HTML format.  Gmail will sanitize the HTML before
        # storing it.
    "restrictToDomain": True or False, # Flag that determines whether responses are sent to recipients who are
        # outside of the user'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="https://support.google.com/mail/answer/25922"&gt;"Vacation
        # responder"&lt;/a&gt; feature in the web interface.
      "responseSubject": "A String", # 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.
      "responseBodyPlainText": "A String", # Response body in plain text format.
      "restrictToContacts": True or False, # Flag that determines whether responses are sent to recipients who are not
          # in the user's list of contacts.
      "enableAutoReply": True or False, # Flag that controls whether Gmail automatically replies to messages.
      "startTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
          # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
          # &lt;code&gt;endTime&lt;/code&gt;.
      "endTime": "A String", # 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 &lt;code&gt;startTime&lt;/code&gt; and
          # &lt;code&gt;endTime&lt;/code&gt; are specified, &lt;code&gt;startTime&lt;/code&gt; must precede
          # &lt;code&gt;endTime&lt;/code&gt;.
      "responseBodyHtml": "A String", # Response body in HTML format.  Gmail will sanitize the HTML before
          # storing it.
      "restrictToDomain": True or False, # Flag that determines whether responses are sent to recipients who are
          # outside of the user's domain. This feature is only available for G Suite
          # users.
    }</pre>
</div>

</body></html>