<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="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</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 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.</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. 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.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<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;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.
    &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
    &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
  }</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;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.
    &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.
  }</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 &quot;Language settings&quot; feature in the web interface.
      &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an RFC 3066 Language Tag (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 Gmail settings for all available options, as described in the language settings help article. A table of sample values is also provided in the Managing Language Settings guide 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 &quot;Vacation responder&quot; feature in the web interface.
    &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
    &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;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;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.
    &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;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;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.
  }</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;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.
  &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
  &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
}

  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;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.
    &quot;disposition&quot;: &quot;A String&quot;, # The state that a message should be left in after it has been forwarded.
    &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
  }</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;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.
  &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.
}

  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;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.
    &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.
  }</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 &quot;Language settings&quot; feature in the web interface.
    &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an RFC 3066 Language Tag (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 Gmail settings for all available options, as described in the language settings help article. A table of sample values is also provided in the Managing Language Settings guide 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 &quot;Language settings&quot; feature in the web interface.
      &quot;displayLanguage&quot;: &quot;A String&quot;, # The language to display Gmail in, formatted as an RFC 3066 Language Tag (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 Gmail settings for all available options, as described in the language settings help article. A table of sample values is also provided in the Managing Language Settings guide 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 &quot;Vacation responder&quot; feature in the web interface.
  &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
  &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;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;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.
  &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;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;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.
}

  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 &quot;Vacation responder&quot; feature in the web interface.
    &quot;enableAutoReply&quot;: True or False, # Flag that controls whether Gmail automatically replies to messages.
    &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;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;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.
    &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;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;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.
  }</pre>
</div>

</body></html>