Búsqueda de log de correo electrónico

OCI Email Delivery se integra con el servicio OCI Logging para proporcionar logs de actividad detallados. Los logs están asociados a cada dominio de envío de correo electrónico (dominio de correo electrónico) y es necesario activarlos. Recomendamos encarecidamente activar los registros de entrega de correo electrónico para realizar un seguimiento de los envíos, las actividades de retransmisión y los eventos posteriores a la entrega, como quejas de correo no deseado, cancelaciones de suscripción, aperturas y clics.

Para activar y acceder a los logs de entrega de correo electrónico:
  1. Configure políticas de registro para que su arrendamiento pueda gestionar, escribir y acceder a los logs.
  2. Para activar el registro para todos los dominios o para los dominios seleccionados, utilice el panel de control de capacidad de entrega. Para activar un solo dominio, abra la página de detalles, seleccione el menú de la barra lateral Logs y active una o ambas opciones: registro Saliente aceptado y Saliente retransmitido.
  3. Después de activar el registro para un dominio, puede examinar y buscar logs de actividad mediante la página Búsqueda de logs en la consola web de OCI.

Tipos de log de Email Delivery

El servicio OCI Logging realiza un seguimiento de todas las actividades en interfaces como la consola web, la API y la CLI. Además de los logs de auditoría por defecto, Email Delivery proporciona dos tipos de log para enviar la actividad:

  • OutboundAccepted: registra la actividad de envío de correo electrónico entrante (correcta o con fallos).
    • Envíos correctos (aceptados por el servicio Email Delivery)
    • Aceptado pero suprimido, debido a que el destinatario está en la lista de supresión
    • Destinatario o remitente no válidos (incluidos los remitentes que no están en la lista de remitentes aprobados)
  • OutboundRelayed: realiza un seguimiento de la entrega saliente y la interacción del usuario.
    • Entregas correctas
    • Devoluciones, quejas de correo no deseado y cancelaciones de suscripción
    • Abre y hace clic

Puede activar uno o ambos tipos de log para cada dominio de correo electrónico según sea necesario.

Eventos y filtros comunes de log de dominio de correo electrónico

En la siguiente tabla, se resumen los eventos y filtros de log típicos. Para obtener registros detallados, consulte Detalles de registro para Email Delivery.

Evento Tipo de Log Filtros de log (se asume AND para varios) Notas
Correo electrónico aceptado para entrega por correo electrónico de OCI OutboundAccepted data.action = 'accept'
Correo electrónico rechazado o bloqueado (destinatario en la lista de supresión) OutboundAccepted data.action = 'accept' y data.errorType = 'Recipient suppressed' El campo data.smtpStatus contiene el motivo formal
Correo electrónico reenviado correctamente al proveedor del destinatario OutboundRelayed data.action = 'relay'
Correos electrónicos reenviados para un valor de cabecera personalizado específico OutboundRelayed data.action = 'relay' y data.headers."x-campaignid" = '999' Utilizar comillas dobles para nombres de cabecera personalizados con caracteres no alfanuméricos
Correo electrónico devuelto (problema de entrega: destinatario desconocido, correo no deseado, etc.) OutboundRelayed data.action = 'bounce' Filtre más con data.errorType (hard o soft). Consulte los campos adicionales: data.bounceCategory, data.bounceCode, data.smtpStatus, data.message
El destinatario registró una reclamación por correo no deseado OutboundRelayed data.action = 'complaint'
El destinatario abrió un correo electrónico OutboundRelayed data.action = 'open'

El campo adicional puede tener información sobre el cliente de correo electrónico y el sistema operativo del destinatario:

data.userAgent
Se abre para un valor de cabecera personalizado específico OutboundRelayed data.action = 'open' y data.headers.region = 'Northeast'
El destinatario ha hecho clic en un enlace de un correo electrónico OutboundRelayed data.action = 'click'

Búsqueda de logs de Email Delivery

Puede buscar logs de actividad detallados de Email Delivery mediante el lenguaje de consulta de registro, de forma similar a cómo se trabaja con métricas de OCI. En lugar de simplemente acceder a recuentos de actividad agregados previamente, las consultas de log le ayudan a definir el ámbito y filtrar los resultados de búsqueda.

Por ejemplo, la siguiente consulta busca todos los logs de Email Delivery para cada dominio de un compartimento especificado (mediante el OCID del compartimento) y devuelve todos los envíos de correo electrónico, las entregas salientes y las actividades relacionadas. Los resultados se ordenan por fecha, y las entradas más recientes se muestran primero:

search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq"
| type='com.oraclecloud.emaildelivery.emaildomain.outbound*'
| sort by datetime desc

Puede restringir la búsqueda mediante filtros adicionales. A continuación se muestran algunos ejemplos:

Datos necesarios Filtro de Búsqueda
Recuento de correos electrónicos aceptados para un valor de cabecera personalizado determinado
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mydomain_com_outboundaccepted"
| data.action = 'accept' and data.headers.region = 'Europe'
| count
Envíos fallidos para el dominio de remitente mycompany.com (sin importar el motivo)
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mydomain_com_outboundaccepted" 
| data.errorType!='' and source='mycompany.com'
| sort by datetime desc

El campo errorType solo aparece para envíos con fallos y no está presente para los correctos. Todos los envíos fallidos se registran en el log OutboundAccepted. Para buscar en varios dominios, utilice solo el OCID del compartimento y aplique la misma cláusula de filtrado.

Envíos suprimidos en todos los dominios de remitentes
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
| data.errorType='Recipient suppressed' 
| sort by datetime desc

Esta consulta le ayuda a identificar qué envíos de correo electrónico se bloquean o suprimen porque el destinatario está en la lista de supresión. Elimine estos destinatarios de sus listas de correo o actualice su información según sea necesario.

Correo electrónico retransmitido correctamente (es decir, aceptado por el proveedor de correo electrónico del destinatario para la entrega), opcionalmente mediante el dominio de envío
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
| data.action='relay' 
| sort by datetime desc

Esta consulta muestra todos los correos electrónicos transmitidos correctamente para cada dominio de envío del compartimento especificado. Para mostrar los resultados solo para el dominio de envío mycompany.com, agregue el campo source al filtro:

search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed" 
| data.action='relay' and source='mycompany.com' 
| sort by datetime desc

Puede filtrar por el campo de origen para buscar un dominio de envío específico sin especificar el grupo de logs y el nombre de log en la cláusula de búsqueda. Sin embargo, cuando tiene varios dominios de envío, buscar en un log específico, como se muestra aquí, suele ser más rápido y eficiente.

Devoluciones de correo electrónico de un determinado proveedor de correo electrónico de destinatario, ordenadas por tipo de devolución (flexible, temporal)
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed" 
| data.action='bounce' and data.receivingDomain='hotmail.com' 
| sort by data.errorType
Todas las devoluciones permanentes en todos los dominios de envío
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
|   data.action='bounce' and data.errorType='hard' 
| sort by datetime desc
Recuento de aperturas para un valor de cabecera personalizado determinado
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
|   data.action='open' and data.headers."x-subscriberid"='83725371' 
| count

Búsqueda de logs de Email Delivery mediante la API

OCI proporciona SDK en varios lenguajes de programación principales, incluidos los métodos de SDK para cada servicio. Para buscar logs mediante programación, utilice el método SearchLogs de las API de OCI Logging. Este método acepta un rango de fecha y hora y un objeto de consulta que utiliza la misma sintaxis que la consola web. También puede especificar algunos campos opcionales.

Nota

Las API de lista, como SearchLogs, devuelven un número máximo predeterminado de registros por solicitud. Si la respuesta contiene el número máximo de registros, incluye un campo opc-next-page. Para recuperar más registros, envíe la misma solicitud con el valor opc-next-page en el parámetro page. También puede aumentar el número de registros por página definiendo el parámetro limit. Para obtener más información, consulte Paginación de lista de API de OCI.

Para obtener más ejemplos, consulte la página Uso de la API de registro de OCI. Estas son algunas búsquedas de logs reales de Email Delivery en Python:

Datos necesarios Ejemplo de código (Python)
Devoluciones durante un período de tres días, enviadas desde remitentes de mycompany.com
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-01T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-04T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed\" | where data.action='bounce'", is_return_field_info=False))
print(search_logs_response.data)
Los correos electrónicos se han transmitido correctamente para todos los dominios de envío de un compartimento durante un período de una hora
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-03T08:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-03T09:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | where data.action='relay'", is_return_field_info=False))
print(search_logs_response.data)
Todos los destinatarios de Gmail y Comcast se transmitieron con éxito durante un período de 24 horas
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-03T08:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-03T09:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | where data.action='relay' and (data.receivingDomain='gmail.com' or data.receivingDomain='comcast.net') | sort by datetime DESC", is_return_field_info=False))
print(search_logs_response.data)
Recuento de correos electrónicos entregados por dominio de destinatario para un valor de cabecera personalizado determinado
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)

search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-05-12T17:30:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-05-12T18:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | data.action = 'relay' and data.headers.\"x-campaignid\" = '999' | summarize count(data.receivingDomain) as Count by data.receivingDomain as RecipientDomain", is_return_field_info=False))

print(search_logs_response.data)

Result:

{
    "fields": null,
    "results": [
        {
            "data": {
            "Count": 2,
            "RecipientDomain": "gmail.com"
           }
        },
        {
            "data": {
            "Count": 1,
            "RecipientDomain": "yahoo.com"
           }
        }
    ],
      "summary": {
        "field_count": null,
        "result_count": 2
    }
}