<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.sendAs.html">sendAs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="gmail_v1.users.settings.sendAs.smimeInfo.html">smimeInfo()</a></code>
</p>
<p class="firstline">Returns the smimeInfo 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="#create">create(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a custom "from" send-as alias. If an SMTP MSA is specified, Gmail will attempt to connect to the SMTP service to validate the configuration before creating the alias. If ownership verification is required for the alias, a message will be sent to the email address and the resource's verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. This method is only available to service account clients that have been delegated domain-wide authority.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, sendAsEmail, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified send-as alias. Revokes any verification that may have been required for using it. This method is only available to service account clients that have been delegated domain-wide authority.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, sendAsEmail, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified send-as alias. Fails with an HTTP 404 error if the specified address is not a member of the collection.</p>
<p class="toc_element">
  <code><a href="#list">list(userId, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the send-as aliases for the specified account. The result includes the primary send-as address associated with the account as well as any custom "from" aliases.</p>
<p class="toc_element">
  <code><a href="#patch">patch(userId, sendAsEmail, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Patch the specified send-as alias.</p>
<p class="toc_element">
  <code><a href="#update">update(userId, sendAsEmail, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a send-as alias. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. Addresses other than the primary address for the account can only be updated by service account clients that have been delegated domain-wide authority.</p>
<p class="toc_element">
  <code><a href="#verify">verify(userId, sendAsEmail, x__xgafv=None)</a></code></p>
<p class="firstline">Sends a verification email to the specified send-as alias address. The verification status must be `pending`. This method is only available to service account clients that have been delegated domain-wide authority.</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="create">create(userId, body=None, x__xgafv=None)</code>
  <pre>Creates a custom &quot;from&quot; send-as alias. If an SMTP MSA is specified, Gmail will attempt to connect to the SMTP service to validate the configuration before creating the alias. If ownership verification is required for the alias, a message will be sent to the email address and the resource&#x27;s verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. 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:

{ # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
  &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
  &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
    &quot;port&quot;: 42, # The port of the SMTP service. Required.
    &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
    &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
    &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
  &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
  &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
  &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
  &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
  &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
    &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
    &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
      &quot;port&quot;: 42, # The port of the SMTP service. Required.
      &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
      &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
      &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
      &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    },
    &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
    &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
    &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
    &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
    &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
    &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
    &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, sendAsEmail, x__xgafv=None)</code>
  <pre>Deletes the specified send-as alias. Revokes any verification that may have been required for using it. 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)
  sendAsEmail: string, The send-as alias to be deleted. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, sendAsEmail, x__xgafv=None)</code>
  <pre>Gets the specified send-as alias. Fails with an HTTP 404 error if the specified address is not a member of the collection.

Args:
  userId: string, User&#x27;s email address. The special value &quot;me&quot; can be used to indicate the authenticated user. (required)
  sendAsEmail: string, The send-as alias to be retrieved. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
    &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
    &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
      &quot;port&quot;: 42, # The port of the SMTP service. Required.
      &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
      &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
      &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
      &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    },
    &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
    &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
    &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
    &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
    &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
    &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
    &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId, x__xgafv=None)</code>
  <pre>Lists the send-as aliases for the specified account. The result includes the primary send-as address associated with the account as well as any custom &quot;from&quot; aliases.

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:

    { # Response for the ListSendAs method.
    &quot;sendAs&quot;: [ # List of send-as aliases.
      { # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
        &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
        &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
          &quot;port&quot;: 42, # The port of the SMTP service. Required.
          &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
          &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
          &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
          &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
        },
        &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
        &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
        &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
        &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
        &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
        &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
        &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(userId, sendAsEmail, body=None, x__xgafv=None)</code>
  <pre>Patch the specified send-as alias.

Args:
  userId: string, User&#x27;s email address. The special value &quot;me&quot; can be used to indicate the authenticated user. (required)
  sendAsEmail: string, The send-as alias to be updated. (required)
  body: object, The request body.
    The object takes the form of:

{ # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
  &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
  &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
    &quot;port&quot;: 42, # The port of the SMTP service. Required.
    &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
    &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
    &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
  &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
  &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
  &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
  &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
  &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
    &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
    &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
      &quot;port&quot;: 42, # The port of the SMTP service. Required.
      &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
      &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
      &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
      &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    },
    &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
    &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
    &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
    &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
    &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
    &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
    &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(userId, sendAsEmail, body=None, x__xgafv=None)</code>
  <pre>Updates a send-as alias. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. Addresses other than the primary address for the account can only be updated by 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)
  sendAsEmail: string, The send-as alias to be updated. (required)
  body: object, The request body.
    The object takes the form of:

{ # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
  &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
  &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
    &quot;port&quot;: 42, # The port of the SMTP service. Required.
    &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
    &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
    &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
  &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
  &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
  &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
  &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
  &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom &quot;from&quot; address. Send-as aliases correspond to the &quot;Send Mail As&quot; feature in the web interface.
    &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
    &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
      &quot;port&quot;: 42, # The port of the SMTP service. Required.
      &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
      &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
      &quot;securityMode&quot;: &quot;A String&quot;, # The protocol that will be used to secure communication with the SMTP service. Required.
      &quot;username&quot;: &quot;A String&quot;, # The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
    },
    &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom &quot;from&quot; aliases.
    &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
    &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
    &quot;displayName&quot;: &quot;A String&quot;, # A name that appears in the &quot;From:&quot; header for mail sent using this alias. For custom &quot;from&quot; addresses, when this is empty, Gmail will populate the &quot;From:&quot; header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.
    &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
    &quot;isDefault&quot;: True or False, # Whether this address is selected as the default &quot;From:&quot; address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.
    &quot;treatAsAlias&quot;: True or False, # Whether Gmail should treat this address as an alias for the user&#x27;s primary email address. This setting only applies to custom &quot;from&quot; aliases.
  }</pre>
</div>

<div class="method">
    <code class="details" id="verify">verify(userId, sendAsEmail, x__xgafv=None)</code>
  <pre>Sends a verification email to the specified send-as alias address. The verification status must be `pending`. 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)
  sendAsEmail: string, The send-as alias to be verified. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

</body></html>