<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)</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)</a></code></p>
<p class="firstline">Updates IMAP settings.</p>
<p class="toc_element">
  <code><a href="#updateLanguage">updateLanguage(userId, body)</a></code></p>
<p class="firstline">Updates language settings.</p>
<p class="toc_element">
  <code><a href="#updatePop">updatePop(userId, body)</a></code></p>
<p class="firstline">Updates POP settings.</p>
<p class="toc_element">
  <code><a href="#updateVacation">updateVacation(userId, body)</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's email address. The special value "me" can be used to indicate the authenticated user. (required)

Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
    "enabled": True or False, # Whether all incoming mail is automatically forwarded to another address.
    "emailAddress": "A String", # Email address to which all incoming messages are forwarded. This email address must be a verified member of the forwarding addresses.
    "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)</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)

Returns:
  An object of the form:

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

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

Returns:
  An object of the form:

    { # Language settings for an account. These settings correspond to the "Language settings" feature in the web interface.
      "displayLanguage": "A String", # 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 "Language" 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'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's email address. The special value "me" can be used to indicate the authenticated user. (required)

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

Returns:
  An object of the form:

    { # Vacation auto-reply settings for an account. These settings correspond to the "Vacation responder" 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 startTime and endTime are specified, startTime must precede endTime.
      "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 startTime and endTime are specified, startTime must precede endTime.
      "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)</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. (required)
    The object takes the form of:

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


Returns:
  An object of the form:

    { # Auto-forwarding settings for an account.
    "enabled": True or False, # Whether all incoming mail is automatically forwarded to another address.
    "emailAddress": "A String", # Email address to which all incoming messages are forwarded. This email address must be a verified member of the forwarding addresses.
    "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)</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. (required)
    The object takes the form of:

{ # IMAP settings for an account.
    "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.
    "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.
    "enabled": True or False, # Whether IMAP is enabled for the 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.
  }


Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="updateLanguage">updateLanguage(userId, body)</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's email address. The special value "me" can be used to indicate the authenticated user. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Language settings for an account. These settings correspond to the "Language settings" feature in the web interface.
    "displayLanguage": "A String", # 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 "Language" 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'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 "Language settings" feature in the web interface.
      "displayLanguage": "A String", # 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 "Language" 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'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)</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. (required)
    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.
}


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)</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. (required)
    The object takes the form of:

{ # Vacation auto-reply settings for an account. These settings correspond to the "Vacation responder" 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 startTime and endTime are specified, startTime must precede endTime.
    "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 startTime and endTime are specified, startTime must precede endTime.
    "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.
  }


Returns:
  An object of the form:

    { # Vacation auto-reply settings for an account. These settings correspond to the "Vacation responder" 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 startTime and endTime are specified, startTime must precede endTime.
      "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 startTime and endTime are specified, startTime must precede endTime.
      "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>