Búsqueda de sitios web

Envíe informes por correo electrónico utilizando Graph API para la entrega segura de informes


Los informes de Microsoft 365 son un arma secreta que le permite monitorear el entorno de Office 365 de manera efectiva. Para compartir dichos informes con sus colegas y usuarios, Outlook ha sido un medio de colaboración útil. De esta manera, para reducir el esfuerzo manual, puede utilizar el cmdlet “Send-MailMessage”, que ha sido una opción popular para enviar informes a través de PowerShell. ¡Sin embargo, llega un punto de control!

“El cmdlet Send-MailMessage está obsoleto. Este cmdlet no garantiza conexiones seguras a servidores SMTP. Si bien no hay un reemplazo inmediato disponible en PowerShell, le recomendamos que no utilice Send-MailMessage. Para obtener más información, consulte la nota de compatibilidad de plataforma DE0005”.

¿Alguna vez viste el mensaje anterior? Esta es una nota de advertencia proporcionada por Microsoft en su documento oficial, que muestra que "Enviar mensaje de correo" es menos seguro?. ¡No te preocupes! Puede comenzar a enviar informes por correo electrónico utilizando Microsoft Graph API, que es el método más seguro utilizando tokens OAuth, lo que hace que el entorno O365 se mantenga alejado de las amenazas a la seguridad.

Por lo tanto, eche un vistazo a este blog para aprender cómo enviar informes por correo electrónico utilizando Graph API.

Elija la API de Microsoft Graph para enviar informes por correo electrónico

La API de Microsoft Graph actúa como un punto final único que le permite acceder e interactuar con los servicios en la nube de Microsoft 365.

La razón principal por la que se prefiere utilizar Graph API para la distribución de informes es su "seguridad" ?. Al enviar informes a través de Graph API, puede reducir el riesgo de robo de informes y otros incidentes relacionados con la seguridad.

Luego viene la “eficiencia”. Graph API gestiona eficazmente el proceso de envío de correo electrónico, garantizando que los informes se entreguen a la persona adecuada en el momento adecuado.

Pasos para enviar informes por correo electrónico utilizando Graph API

Primero, debe configurar los pasos siguientes para enviar informes a través de Graph.

1. Inicie sesión en Microsoft Graph Explorer: Primero, inicie sesión en Microsoft Graph Explorer con su cuenta de Microsoft 365.

2. Configurar el método HTTP: En la barra de solicitud HTTP, establezca el método HTTP en “POST”.

3. Establezca el punto final: A continuación, configure la solicitud HTTP en cualquiera de las dos llamadas a la API de Outlook que se indican a continuación.

  • https://graph.microsoft.com/v1.0/me/sendMail: para enviar el informe del usuario que inició sesión.
  • https://graph.microsoft.com/v1.0/users/{UserPrincipalName}/sendMail: para enviar un informe desde el buzón de correo del usuario especificado, debe reemplazar "UserPrincipalName" con la dirección de correo electrónico del usuario respectivo.

4. Conceder permiso: en la pestaña "Modificar permisos", puede ver el permiso "Correo.Enviar". Luego, haga clic en el botón "Consentimiento" para otorgar el permiso "Mail.Send" al Graph Explorer.

5. Configurar el tipo de contenido: Puede configurar el cuerpo de la solicitud en formatos JSON/MIME. Por lo tanto, puede utilizar application/json o text/plain para objetos JSON/MIME, según sus requisitos. Por cierto, se prefiere utilizar el formato JSON, lo que permite la entrega gratuita de informes.

Después de configurar los pasos anteriores, puede ejecutar los formatos JSON proporcionados para,

  • Envíe un mensaje de correo electrónico utilizando la API de correo de Outlook.
  • Envíe un informe por correo electrónico a un destinatario mediante una llamada API REST.

Enviar un mensaje de correo electrónico utilizando la API de correo de Outlook

Puede enviar un mensaje de correo electrónico a un destinatario utilizando el formato JSON a continuación reemplazando la dirección de correo electrónico del destinatario. Después de configurar los destinatarios respectivos, haga clic en "Ejecutar consulta" para entregar el mensaje.

FORMATO JSON:

{ 
  "message": { 
    "subject": "<SubjectOfTheMail>", 
    "body": { 
      "contentType": "Text", 
      "content": "<ContentForYourMail>" 
    }, 
    "toRecipients": [ 
      { 
        "emailAddress": { 
          "address": "<RecipientemailId>" 
        } 
      } 
    ], 
    "ccRecipients": [ 
      { 
        "emailAddress": { 
          "address": "<emailId>" 
        } 
      } 
    ] 
  }, 
  "saveToSentItems": "false" 
}

Nota: El formato anterior se proporcionará de forma predeterminada en el cuerpo de la respuesta cuando configure “POST /users/{id | userPrincipalName}/sendMail ” o “POST /me/sendMail ”llamada. Sólo necesita reemplazar la dirección del destinatario en el formato indicado.

Además, si necesita guardar el mensaje en "Elementos enviados", agregue "saveToSentItems": "falso" en su objeto JSON como en el formato dado.

Enviar un informe por correo electrónico a un destinatario mediante una llamada API REST

El envío de informes a otros administradores en Outlook puede ser más fácil y sin errores con el uso de Microsoft Graph API, que elimina la necesidad de esfuerzo manual. Con Graph API, puede incluir un informe especificando el nombre del informe directamente en formato JSON.

Para entregar informes de Microsoft 365 con un mensaje de correo electrónico, utilice el formato JSON en su Graph.

FORMATO JSON:

{ 
  "message": { 
    "subject": "<SubjectOfTheMail>", 
    "body": { 
      "contentType": "Text", 
      "content": "<ContentForYourMail>" 
    }, 
    "toRecipients": [ 
      { 
        "emailAddress": { 
          "address": "<RecipientEmailId>" 
        } 
      } 
    ], 
    "attachments": [ 
      { 
        "@odata.type": "#microsoft.graph.fileAttachment", 
        "name": "<ReportName>", 
        "contentType": "text/plain", 
        "contentBytes": "SGVsbG8gV29ybGQh" 
      } 
    ] 
  } 
}

Nota: Una vez que se acepte su solicitud, recibirá una notificación con el estado “HTTP/1.1 202 Aceptado”, indicando que se ha iniciado el proceso de envío de correo electrónico.

En caso de que no encuentres el correo electrónico en tu bandeja de entrada, compruébalo en tu carpeta de spam.

El formato JSON anterior puede resultar útil para enviar informes a una pequeña cantidad de destinatarios. Pero, cuando se trata de destinatarios masivos, debes especificar las direcciones de correo electrónico de todos los destinatarios una por una en el campo "toRecipients", lo cual es una tarea engorrosa.

Sin embargo, existe una manera de realizar operaciones masivas sin iniciar sesión en Graph Explorer. Al integrar las llamadas a la API de Outlook en PowerShell, puede realizar operaciones de envío masivo de informes de manera eficiente.

Utilice la API de Microsoft Graph para enviar informes desde PowerShell

Graph Explorer puede presentar desafíos cuando se trata de operaciones masivas, como enviar informes masivos o enviar informes por correo electrónico a una gran cantidad de personas. Sin embargo, con PowerShell, puede llamar a las API de correo de Outlook para realizar operaciones masivas utilizando una aplicación registrada.

Para lograr esto, primero debe registrar una aplicación en Azure AD y generar secretos de cliente para un acceso seguro. Además, asegúrese de anotar el secreto del cliente, ya que no será visible más tarde.

Permiso: Después de registrar su aplicación en Azure Active Directory, asegúrese de ingresar “Mail. Enviar ”permiso API delegado a su aplicación. Para hacerlo, siga la navegación a continuación.

Centro de administración de Microsoft Entra> Aplicaciones> Registros de aplicaciones> Aplicación respectiva> Permisos de API> Agregar un permiso> Microsoft Graph > Permiso delegado> Correo> “Mail.Send” > Agregar permisos .

Una vez que haya terminado con los requisitos previos, pasemos a las formas importantes que se indican a continuación para enviar un informe por correo mediante PowerShell y Graph API.

  1. Enviar un informe por correo electrónico a varios destinatarios mediante la API REST
  2. Envíe varios informes a un destinatario mediante una llamada a la API Graph
  3. Script de PowerShell para enviar informes masivos por correo electrónico a destinatarios masivos a través de Graph

Envíe un informe por correo electrónico a destinatarios masivos a través de la API de Microsoft Graph

Piense en un escenario: si desea compartir los informes de actividad del usuario con sus coadministradores, debe enviarles los informes por correo electrónico individualmente. Espere, en lugar de enviar manualmente informes individuales a diferentes miembros del equipo, puede usar un script de PowerShell con una llamada Graph API, que lee un archivo CSV que contiene las direcciones de correo electrónico de los administradores y envía automáticamente informes de actividad del usuario a cada destinatario.

Archivo CSV de muestra:

# Authenticate and get an access token 
 $tokenEndpoint = "https://login.microsoftonline.com/<tenantId>/oauth2/token" 
 $Body = @{ 
     Grant_Type    = "client_credentials" 
     Client_Id     = "<clientId>" 
     Client_Secret = "<clientSecret>" 
     Resource      = "https://graph.microsoft.com" 
 } 
 $accessToken = (Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token 
# Read the CSV file to get the email details 
 $csvPath = "<recipientCSVFile>" 
 $csvData = Import-Csv -Path $csvPath 
# Attachment details 
 $attachmentPath = "<ReportPath>"  # Replace this with the actual path to the attachment 
 $attachmentBytes = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($attachmentPath)) 
# Send emails with the same report to multiple recipients 
 $URI = "https://graph.microsoft.com/v1.0/users/<UserId>/sendMail" 
foreach ($row in $csvData) { 
     $recipientEmail = $row.Email 
    $params = @{ 
         message = @{ 
             subject = "<SubjectOfTheMail>" 
             toRecipients = @(@{emailAddress = @{address = $recipientEmail}}) 
             attachments = @(@{ "@odata.type" = "#microsoft.graph.fileAttachment"; name = (Get-Item $attachmentPath).Name; contentBytes = $attachmentBytes }) 
         } 
     } | ConvertTo-Json -Depth 4 
    try { 
         $GraphData = Invoke-RestMethod -Method POST -Uri $URI -Headers @{ 
             "Authorization" = "Bearer $accessToken" 
             "Content-type"  = "application/json" 
         } -Body $params 
         $GraphData = $GraphData.value 
     } catch { 
         $errorMessage = $_.Exception.Response.GetResponseStream() 
         $reader = New-Object System.IO.StreamReader($errorMessage) 
         $responseBody = $reader.ReadToEnd() 
         Write-Host "Error response body: $responseBody 
           Write-Host "Email not sent to $recipientEmail." 
     } 
 }

El bloque try and catch en el script anterior lo ayudará a manejar los errores que ocurren debido a problemas de red, entradas no válidas o problemas del servidor.

Enviar varios informes por correo electrónico a un destinatario mediante Rest API y PowerShell

Ahora, piense en un escenario viceversa: para enviar varios informes a un destinatario llamando a la API de correo de Outlook, puede utilizar el script de PowerShell que se menciona a continuación.

Para hacerlo, cree un archivo CSV que contenga las ubicaciones de los informes que deben enviarse.

Archivo CSV de muestra:

$ErrorActionPreference = "Stop"
$tokenEndpoint = "https://login.microsoftonline.com/<TenantId>/oauth2/token"
$Body = @{
    Grant_Type    = "client_credentials"
    Client_Id     = "<ClientId>"
    Client_Secret = "<ClientSecret>"
    Resource      = "https://graph.microsoft.com"
}
$accessToken = $null
try {
    $accessToken = ((Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token)
} catch {
    Write-Host "Error obtaining access token. Please check your client ID, client secret, and tenant ID."
}
if ($accessToken) {
    $recipientEmail = "<RecipientEmailid>"
    $csvPath = "<PathOfTheCSVFile>"
    try {
        $attachments = Import-Csv $csvPath | ForEach-Object {
            $reportPath = $_.ReportsPath.Trim()
            if (-Not (Test-Path $reportPath)) {
                Write-Host "Error: Report file not found at path $reportPath."
                return
            }
            @{
                "@odata.type"   = "#microsoft.graph.fileAttachment"
                "name"          = (Get-Item $reportPath).Name
                "contentBytes"  = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($reportPath))
            }
        }
        $URI = "https://graph.microsoft.com/v1.0/users/<UserPrincipalName>/sendMail"
        $params = @{
            message = @{
                subject = "<SubjectOfTheMail>"
                toRecipients = @(@{emailAddress = @{address = $recipientEmail}})
                attachments = $attachments
            }
        } | ConvertTo-Json -Depth 4
        $response = Invoke-RestMethod -Method POST -Uri $URI -Headers @{
            "Authorization" = "Bearer $accessToken"
            "Content-type" = "application/json"
        } -Body $params
        if ($response -ne $null) {
            Write-Host "Email sent with multiple attachments."
        }
    } catch {
        Write-Host $_.Exception.Message
        Write-Host "Email not sent to $recipientEmail."
    }
} else {
    Write-Host "Access token not obtained. Email not sent to $recipientEmail."
}

El destinatario recibirá un correo electrónico que contiene varios informes, como la captura de pantalla siguiente.

Secuencia de comandos de PowerShell para enviar informes masivos por correo electrónico a varios destinatarios a través de Graph

Enviar informes personalizados a usuarios específicos simultáneamente a través de Outlook puede resultar complicado. Pero el script de PowerShell con llamada API puede facilitarlo al enviar varios informes a destinatarios masivos a la vez.

Por lo tanto, cree un archivo CSV que muestre la dirección del destinatario y la ruta de los archivos adjuntos correspondientes.

Archivo CSV de muestra:

Luego puede utilizar el script de PowerShell que se proporciona a continuación para enviar por correo electrónico varios informes a destinatarios masivos.

$ErrorActionPreference = "Stop"
$tokenEndpoint = "https://login.microsoftonline.com/<TenantId>/oauth2/token"
$Body = @{
    Grant_Type    = "client_credentials"
    Client_Id     = "<ClientId>"
    Client_Secret = "<ClientSecret>"
    Resource      = "https://graph.microsoft.com"
}
$accessToken = $null
try {
    $accessToken = (Invoke-RestMethod -Method POST -Uri $tokenEndpoint -ContentType "application/x-www-form-urlencoded" -Body $Body).access_token
} catch {
    Write-Host "Error obtaining access token. Please check your client ID, client secret, and tenant ID."
    $accessToken = $null
}
if ($accessToken) {
    $csvPath = "<PathOfTheCSVFile>"
    if (-Not (Test-Path $csvPath)) {
        Write-Host "Error: CSV file not found at path $csvPath."
        $csvData = $null
    } else {
        $csvData = Import-Csv -Path $csvPath -ErrorAction SilentlyContinue
    }
    if ($csvData -eq $null) {
        Write-Host "Error reading CSV file. Please check the recipient reports CSV file path."
    } else {
        $URI = "https://graph.microsoft.com/v1.0/users/<UserPrincipalName>/sendMail"
        foreach ($row in $csvData) {
            $recipientEmail = $row.Email
            $attachments = $row.ReportsPath -split ',' | ForEach-Object {
                if (-Not (Test-Path $_.Trim())) {
                    Write-Host "Error: Report file not found at path $_."
                    continue
                }
                $reportBytes = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($_.Trim()))
                @{
                    "@odata.type"   = "#microsoft.graph.fileAttachment"
                    "name"          = (Get-Item $_.Trim()).Name
                    "contentBytes"  = $reportBytes
                }
            }
            $params = @{
                message = @{
                    subject = "<SubjectOfTheMail>"
                    toRecipients = @(@{emailAddress = @{address = $recipientEmail}})
                    attachments = $attachments
                }
            } | ConvertTo-Json -Depth 4
            try {
                Invoke-RestMethod -Method POST -Uri $URI -Headers @{
                    "Authorization" = "Bearer $accessToken"
                    "Content-type"  = "application/json"
                } -Body $params | Out-Null
                Write-Host "Email sent to $recipientEmail with attachments: $($row.ReportsPath -join ', ')"
            } catch {
                $errorMessage = $_.Exception.Response.GetResponseStream()
                $reader = New-Object System.IO.StreamReader($errorMessage)
                $responseBody = $reader.ReadToEnd()
                Write-Host "Error sending email to $recipientEmail. Error response body: $responseBody"
                Write-Host "Email not sent to $recipientEmail."
            }
        }
    }
} else {
    Write-Host "Access token not obtained. Email not sent to any recipients."
}

Además, puede programar secuencias de comandos de PowerShell con el Programador de tareas, lo que le permitirá enviar informes a los destinatarios previstos en intervalos específicos.

Entrega rápida de informes sin complicaciones con AdminDroid

Si es novato en PowerShell, Graph Explorer o Task Scheduler, la ejecución de los scripts y consultas anteriores puede plantear desafíos. ¡Deja esos métodos atrás! Porque AdminDroid gestiona sin esfuerzo todas las tareas de envío de informes, proporcionando una solución unificada para sus necesidades.

Con AdminDroid, puede experimentar el beneficio del envío de informes por correo electrónico en tiempo real, lo que garantiza la entrega inmediata a los usuarios sin demoras.

Por cierto, las herramientas nativas carecen de la capacidad de guardar informes en el formato deseado, programar informes y más. Sin embargo, AdminDroid cierra esta brecha con su función de programación avanzada. Su sólida función de programación le permite enviar informes sin esfuerzo a los destinatarios en intervalos específicos, eliminando la necesidad de ejecutar scripts manuales y realizar consultas en cada intervalo.

Algunos de los beneficios clave de programar informes con AdminDroid:

  1. A pesar de administrar varios inquilinos, AdminDroid ofrece una manera conveniente de seleccionar los inquilinos deseados para programar informes.
  2. Puede personalizar el cuerpo, el tipo de archivo adjunto y el asunto de su correo electrónico.
  3. Los informes programados se pueden guardar en formatos PDF, HTML, CSV, XLS, XLSX y RAW.
  4. Puede configurar cronogramas diarios, semanales o mensuales y, si es necesario, también puede utilizar el horario reciente para la entrega de informes.
  5. Puede permitir que otros administradores se suscriban a sus programaciones, lo que les permitirá recibir los informes programados además de los destinatarios especificados.
  6. Tiene la flexibilidad de almacenar informes programados en el disco local o en un recurso compartido remoto.

Además, monitorear constantemente los flujos de correo electrónico puede protegerlo contra riesgos de seguridad. Por lo tanto, puede programar informes de protección de correo de Exchange Online para un seguimiento constante del correo no deseado y de malware, garantizando un entorno de Exchange Online protegido.

Sumado a lo anterior, puede programar informes de tráfico de correo electrónico con AdminDroid y cumplir con las normas revisando periódicamente el tráfico de correo electrónico entrante y saliente en su Office 365.

Además, para comprender las actividades de correo electrónico a primera vista, AdminDroid ofrece un panel de análisis de correo electrónico para seguir los principales correos electrónicos de malware y phishing en Exchange Online.

Supervise las actividades de correo electrónico de Microsoft 365 y mitigue las amenazas con AdminDroid.

¡No espere a que los ataques por correo electrónico se produzcan inesperadamente! Actúe ahora y descargue AdminDroid para proteger su entorno Exchange Online.

Como resumen, considere utilizar llamadas a la API de Microsoft Graph como una forma segura y sencilla de enviar informes de M365 por correo electrónico. Espero que obtenga suficiente información sobre una forma de enviar informes por correo electrónico utilizando Graph API. No dudes en plantear tus dudas en la sección de comentarios. ¡Siempre estamos listos para resolverlo!

Artículos relacionados