<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="#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</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</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</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</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</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.</p>
<h3>Method Details</h3>
<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
      # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
      # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
        # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
        # This setting only applies to custom &quot;from&quot; aliases.
    &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  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
        # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
        # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
          # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
          # This setting only applies to custom &quot;from&quot; aliases.
      &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  Required.
      },
    }</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
        # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
        # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
          # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
          # This setting only applies to custom &quot;from&quot; aliases.
      &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  Required.
      },
    }</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
            # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
            # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
              # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
              # This setting only applies to custom &quot;from&quot; aliases.
          &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  Required.
          },
        },
    ],
  }</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
      # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
      # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
        # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
        # This setting only applies to custom &quot;from&quot; aliases.
    &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  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
        # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
        # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
          # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
          # This setting only applies to custom &quot;from&quot; aliases.
      &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  Required.
      },
    }</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
      # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
      # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
        # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
        # This setting only applies to custom &quot;from&quot; aliases.
    &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  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
        # &lt;a href=&quot;https://support.google.com/mail/answer/22370&quot;&gt;&quot;Send Mail As&quot;&lt;/a&gt;
        # 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;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;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;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;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;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;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;treatAsAlias&quot;: True or False, # Whether Gmail should &lt;a href=&quot;https://support.google.com/a/answer/1710338&quot;&gt;
          # treat this address as an alias&lt;/a&gt; for the user&#x27;s primary email address.
          # This setting only applies to custom &quot;from&quot; aliases.
      &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;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;host&quot;: &quot;A String&quot;, # The hostname of 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;port&quot;: 42, # The port of the SMTP service.  Required.
      },
    }</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>