Administra el reenvío de correos electrónicos

En este documento, se explica cómo configurar el reenvío de correos electrónicos en la API de Gmail.

Puedes usar el recurso settings para configurar el reenvío de una cuenta. Para que una dirección de correo electrónico se use como dirección de reenvío, debe cumplir con uno de los siguientes criterios:

  • Se verificó la dirección de correo electrónico. Para obtener más información, consulta Cómo crear y verificar direcciones de reenvío.
  • La dirección de correo electrónico pertenece al mismo dominio que el remitente.
  • La dirección de correo electrónico pertenece a un subdominio dentro del mismo dominio del remitente.
  • La dirección de correo electrónico pertenece a un alias de dominio configurado como parte de la misma cuenta de Google Workspace.

Si la dirección de correo electrónico de reenvío no cumple con una de estas reglas, se producirá un error en la configuración del reenvío con la API.

Si deseas obtener información para crear, listar, obtener o borrar direcciones de reenvío, consulta los métodos del recurso settings.forwardingAddresses.

Para obtener información sobre cómo obtener o actualizar la configuración de reenvío automático, consulta los métodos en el recurso settings.

Cómo crear y verificar direcciones de reenvío

Debes crear direcciones de reenvío antes de usarlas. En algunos casos, los usuarios también deben verificar la propiedad de la dirección.

Si Gmail requiere la verificación del usuario para una dirección de reenvío, la dirección 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 que se pueda usar.

Las direcciones de reenvío que no requieren verificación tienen un estado de verificación de accepted.

Cómo habilitar el reenvío automático

Puedes optar por reenviar todos los mensajes nuevos a otra dirección de correo electrónico.

Para ello, llama al método updateAutoForwarding para habilitar el reenvío automático de una cuenta. La llamada requiere una dirección de reenvío registrada y verificada, y una acción para realizar en los mensajes reenviados. Estos se configuran con el objeto AutoForwarding.

El campo disposition se usa para establecer el estado del mensaje después de que se reenvía. El valor predeterminado es dispositionUnspecified, pero no puedes establecer este campo en dispositionUnspecified.

En los siguientes ejemplos de código, se muestra cómo habilitar el reenvío automático y, luego, mover los mensajes reenviados a la papelera:

Java

gmail/snippets/src/main/java/EnableForwarding.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.AutoForwarding;
import com.google.api.services.gmail.model.ForwardingAddress;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;

/* Class to demonstrate the use of Gmail Enable Forwarding API */
public class EnableForwarding {
  /**
   * Enable the auto-forwarding for an account.
   *
   * @param forwardingEmail - Email address of the recipient whose email will be forwarded.
   * @return forwarding id and metadata, {@code null} otherwise.
   * @throws IOException - if service account credentials file not found.
   */
  public static AutoForwarding enableAutoForwarding(String forwardingEmail) 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_SHARING);
    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 {
      // Enable auto-forwarding and move forwarded messages to the trash
      ForwardingAddress address = new ForwardingAddress()
          .setForwardingEmail(forwardingEmail);
      ForwardingAddress createAddressResult = service.users().settings().forwardingAddresses()
          .create("me", address).execute();
      if (createAddressResult.getVerificationStatus().equals("accepted")) {
        AutoForwarding autoForwarding = new AutoForwarding()
            .setEnabled(true)
            .setEmailAddress(address.getForwardingEmail())
            .setDisposition("trash");
        autoForwarding =
            service.users().settings().updateAutoForwarding("me", autoForwarding).execute();
        System.out.println(autoForwarding.toPrettyString());
        return autoForwarding;
      }
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == 403) {
        System.err.println("Unable to enable forwarding: " + e.getDetails());
      } else {
        throw e;
      }
    }
    return null;
  }
}

Python

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


def enable_forwarding():
  """Enable email forwarding.
  Returns:Draft object, including forwarding id and result meta data.

  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)

    address = {"forwardingEmail": "gduser1@workspacesamples.dev"}

    # pylint: disable=E1101
    result = (
        service.users()
        .settings()
        .forwardingAddresses()
        .create(userId="me", body=address)
        .execute()
    )
    if result.get("verificationStatus") == "accepted":
      body = {
          "emailAddress": result.get("forwardingEmail"),
          "enabled": True,
          "disposition": "trash",
      }
      # pylint: disable=E1101
      result = (
          service.users()
          .settings()
          .updateAutoForwarding(userId="me", body=body)
          .execute()
      )
      print(f"Forwarding is enabled : {result}")

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

  return result


if __name__ == "__main__":
  enable_forwarding()

Para inhabilitar el reenvío automático, llama al método updateAutoForwarding y configura el campo enabled del objeto AutoForwarding como false.

Cómo reenviar mensajes específicos

El reenvío automático envía todos los mensajes de Gmail recibidos a la cuenta de destino. Para reenviar mensajes específicos, configura un filtro para crear reglas que reenvíen mensajes en respuesta a los atributos o el contenido de los mensajes.

Para reenviar mensajes a varias cuentas, crea un filtro para cada dirección de correo electrónico de reenvío.