<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)</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)</a></code></p>
<p class="firstline">Gets IMAP settings.</p>
<p class="toc_element">
  <code><a href="#getLanguage">getLanguage(userId)</a></code></p>
<p class="firstline">Gets language settings.</p>
<p class="toc_element">
  <code><a href="#getPop">getPop(userId)</a></code></p>
<p class="firstline">Gets POP settings.</p>
<p class="toc_element">
  <code><a href="#getVacation">getVacation(userId)</a></code></p>
<p class="firstline">Gets vacation responder settings.</p>
<p class="toc_element">
  <code><a href="#updateAutoForwarding">updateAutoForwarding(userId, body=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.</p>
<p class="toc_element">
  <code><a href="#updateImap">updateImap(userId, body=None)</a></code></p>
<p class="firstline">Updates IMAP settings.</p>
<p class="toc_element">
  <code><a href="#updateLanguage">updateLanguage(userId, body=None)</a></code></p>
<p class="firstline">Updates language settings.</p>
<p class="toc_element">
  <code><a href="#updatePop">updatePop(userId, body=None)</a></code></p>
<p class="firstline">Updates POP settings.</p>
<p class="toc_element">
  <code><a href="#updateVacation">updateVacation(userId, body=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)</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)

Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
    &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.
    &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)</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)

Returns:
  An object of the form:

    { # IMAP settings for an account.
    &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;enabled&quot;: True or False, # Whether IMAP is enabled for the 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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getLanguage">getLanguage(userId)</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)

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

Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="getVacation">getVacation(userId)</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)

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;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format. Gmail will sanitize the HTML before storing it.
    &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format.
    &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.
    &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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateAutoForwarding">updateAutoForwarding(userId, body=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;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.
  &quot;enabled&quot;: True or False, # Whether all incoming mail is automatically forwarded to another address.
}


Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
    &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.
    &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)</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;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;enabled&quot;: True or False, # Whether IMAP is enabled for the 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;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.
}


Returns:
  An object of the form:

    { # IMAP settings for an account.
    &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;enabled&quot;: True or False, # Whether IMAP is enabled for the 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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateLanguage">updateLanguage(userId, body=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).
}


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)</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;accessWindow&quot;: &quot;A String&quot;, # The range of messages which are accessible via POP.
  &quot;disposition&quot;: &quot;A String&quot;, # The action that will be executed on a message after it has been fetched via POP.
}


Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="updateVacation">updateVacation(userId, body=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;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format. Gmail will sanitize the HTML before storing it.
  &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format.
  &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.
  &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;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.
}


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;responseBodyHtml&quot;: &quot;A String&quot;, # Response body in HTML format. Gmail will sanitize the HTML before storing it.
    &quot;responseBodyPlainText&quot;: &quot;A String&quot;, # Response body in plain text format.
    &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.
    &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;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.
  }</pre>
</div>

</body></html>