<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.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="#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="#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="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="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>