<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> . <a href="gmail_v1.users.settings.forwardingAddresses.html">forwardingAddresses</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(userId, body)</a></code></p>
<p class="firstline">Creates a forwarding address. If ownership verification is required, a message will be sent to the recipient and the resource's verification status will be set to pending; otherwise, the resource will be created with verification status set to accepted.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, forwardingEmail)</a></code></p>
<p class="firstline">Deletes the specified forwarding address and revokes any verification that may have been required.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, forwardingEmail)</a></code></p>
<p class="firstline">Gets the specified forwarding address.</p>
<p class="toc_element">
  <code><a href="#list">list(userId)</a></code></p>
<p class="firstline">Lists the forwarding addresses for the specified account.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(userId, body)</code>
  <pre>Creates a forwarding address. If ownership verification is required, a message will be sent to the recipient and the resource's verification status will be set to pending; otherwise, the resource will be created with verification status set to accepted.

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:

{ # Settings for a forwarding address.
    "forwardingEmail": "A String", # An email address to which messages can be forwarded.
    "verificationStatus": "A String", # Indicates whether this address has been verified and is usable for forwarding. Read-only.
  }


Returns:
  An object of the form:

    { # Settings for a forwarding address.
      "forwardingEmail": "A String", # An email address to which messages can be forwarded.
      "verificationStatus": "A String", # Indicates whether this address has been verified and is usable for forwarding. Read-only.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, forwardingEmail)</code>
  <pre>Deletes the specified forwarding address and revokes any verification that may have been required.

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)
  forwardingEmail: string, The forwarding address to be deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, forwardingEmail)</code>
  <pre>Gets the specified forwarding address.

Args:
  userId: string, User's email address. The special value "me" can be used to indicate the authenticated user. (required)
  forwardingEmail: string, The forwarding address to be retrieved. (required)

Returns:
  An object of the form:

    { # Settings for a forwarding address.
      "forwardingEmail": "A String", # An email address to which messages can be forwarded.
      "verificationStatus": "A String", # Indicates whether this address has been verified and is usable for forwarding. Read-only.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId)</code>
  <pre>Lists the forwarding addresses 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:

    { # Response for the ListForwardingAddresses method.
    "forwardingAddresses": [ # List of addresses that may be used for forwarding.
      { # Settings for a forwarding address.
          "forwardingEmail": "A String", # An email address to which messages can be forwarded.
          "verificationStatus": "A String", # Indicates whether this address has been verified and is usable for forwarding. Read-only.
        },
    ],
  }</pre>
</div>

</body></html>