Administra alias y firmas con la API de Gmail

En este documento, se explica cómo configurar alias de envío y firmas de correo electrónico en la API de Gmail.

Los alias de envío en nombre de representan las direcciones de correo electrónico desde las que una cuenta puede enviar correos. Cada cuenta siempre tiene al menos un alias que representa la dirección de correo electrónico principal de la cuenta.

Los alias de envío corresponden a la función "Enviar correo electrónico como" de la interfaz web de Gmail.

Los alias también se usan para administrar las firmas de una cuenta. Para cambiar las firmas de correo electrónico, debes tener un conocimiento básico de los alias de enviar como.

Si deseas obtener información para crear, enumerar, obtener, actualizar o borrar alias, consulta el recurso settings.SendAs.

Cómo crear y verificar alias

Debes crear alias antes de usarlos. En algunos casos, los usuarios también deben verificar la propiedad del alias.

Si Gmail requiere la verificación del usuario para un alias, este se devuelve con un VerificationStatus de pending. Se enviará automáticamente un mensaje de verificación a la dirección de correo electrónico de destino. El propietario de la dirección de correo electrónico debe completar el proceso de verificación antes de poder usarla.

Los alias que no requieren verificación tienen un estado de verificación de accepted.

Si es necesario, usa el método settings.sendAs.verify para volver a enviar la solicitud de verificación.

Configuración de SMTP

Los alias de direcciones externas deben enviar correos electrónicos a través de un agente de envío de correo electrónico (MSA) SMTP remoto. Para configurar el MSA de SMTP para un alias, usa el campo smtpMsa para proporcionar los detalles de la conexión.

Administra firmas

También puedes configurar firmas de correo electrónico para cada alias. En los siguientes ejemplos de código, se muestra cómo establecer la firma para la dirección principal del usuario:

Java

gmail/snippets/src/main/java/UpdateSignature.java
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.gmail.model.ListSendAsResponse;
import com.google.api.services.gmail.model.SendAs;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;

/* Class to demonstrate the use of Gmail Update Signature API */
public class UpdateSignature {
  /**
   * Update the gmail signature.
   *
   * @return the updated signature id , {@code null} otherwise.
   * @throws IOException - if service account credentials file not found.
   */
  public static String updateGmailSignature() throws IOException {
        /* Load pre-authorized user credentials from the environment.
           TODO(developer) - See https://developers.google.com/identity for
            guides on implementing OAuth2 for your application. */
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(GmailScopes.GMAIL_SETTINGS_BASIC);
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);

    // Create the gmail API client
    Gmail service = new Gmail.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Gmail samples")
        .build();

    try {
      SendAs primaryAlias = null;
      ListSendAsResponse aliases = service.users().settings().sendAs().list("me").execute();
      for (SendAs alias : aliases.getSendAs()) {
        if (alias.getIsPrimary()) {
          primaryAlias = alias;
          break;
        }
      }
      // Updating a new signature
      SendAs aliasSettings = new SendAs().setSignature("Automated Signature");
      SendAs result = service.users().settings().sendAs().patch(
              "me",
              primaryAlias.getSendAsEmail(),
              aliasSettings)
          .execute();
      //Prints the updated signature
      System.out.println("Updated signature - " + result.getSignature());
      return result.getSignature();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == 403) {
        System.err.println("Unable to update signature: " + e.getDetails());
      } else {
        throw e;
      }
    }
    return null;
  }
}

Python

gmail/snippet/settings snippets/update_signature.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def update_signature():
  """Create and update signature in gmail.
  Returns:Draft object, including updated signature.

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create gmail api client
    service = build("gmail", "v1", credentials=creds)

    primary_alias = None

    # pylint: disable=E1101
    aliases = service.users().settings().sendAs().list(userId="me").execute()
    for alias in aliases.get("sendAs"):
      if alias.get("isPrimary"):
        primary_alias = alias
        break

    send_as_configuration = {
        "displayName": primary_alias.get("sendAsEmail"),
        "signature": "Automated Signature",
    }

    # pylint: disable=E1101
    result = (
        service.users()
        .settings()
        .sendAs()
        .patch(
            userId="me",
            sendAsEmail=primary_alias.get("sendAsEmail"),
            body=send_as_configuration,
        )
        .execute()
    )
    print(f'Updated signature for: {result.get("displayName")}')

  except HttpError as error:
    print(f"An error occurred: {error}")
    result = None

  return result.get("signature")


if __name__ == "__main__":
  update_signature()