<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)</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.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, sendAsEmail)</a></code></p>
<p class="firstline">Deletes the specified send-as alias. Revokes any verification that may have been required for using it.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, sendAsEmail)</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)</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)</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.</p>
<p class="toc_element">
  <code><a href="#update">update(userId, sendAsEmail, body=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.</p>
<p class="toc_element">
  <code><a href="#verify">verify(userId, sendAsEmail)</a></code></p>
<p class="firstline">Sends a verification email to the specified send-as alias address. The verification status must be pending.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(userId, body=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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
      &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;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.
    &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.
  }


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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
        &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;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.
      &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.
    }</pre>
</div>

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

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

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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
        &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;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.
      &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.
    }</pre>
</div>

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

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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
            &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;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.
          &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.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(userId, sendAsEmail, body=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. This method supports patch semantics.

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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
      &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;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.
    &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.
  }


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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
        &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;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.
      &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.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(userId, sendAsEmail, body=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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
      &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;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.
    &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.
  }


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;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;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;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;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;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;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;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;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;port&quot;: 42, # The port of the SMTP service. Required.
        &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;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.
      &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.
    }</pre>
</div>

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

</body></html>