SharePoint Online: PowerShell para enviar correo electrónico
¿Sabía que puede usar PowerShell para enviar correos electrónicos desde SharePoint Online? Esta es una excelente manera de automatizar los flujos de trabajo basados en correo electrónico, como el envío de notificaciones o alertas. En esta publicación de blog, le mostraremos cómo hacer esto usando PowerShell.
Podemos enviar correos electrónicos desde SharePoint Online, ya sea con la función SendEmail de SPUtility o con el cmdlet de PowerShell Send-MailMessage. A continuación se muestran ejemplos de ambos casos:
PowerShell para enviar correo electrónico en SharePoint Online:
Esta publicación de blog le mostrará cómo usar PowerShell para enviar un correo electrónico desde SharePoint Online. ¡Recorreremos scripts de ejemplo que enviarán un correo electrónico utilizando las formas nativas de SharePoint y PowerShell!
A continuación se explica cómo enviar un correo electrónico desde SharePoint Online utilizando el script del modelo de objetos del lado del cliente (CSOM) de PowerShell:
Import-Module Microsoft.Online.SharePoint.Powershell -DisableNameChecking
#Config Parameters
$AdminSiteURL = "https://crescent-admin.sharepoint.com/"
$EmailFrom ="SPAdmin@crescent.com"
$EmailTo = "Salaudeen.Rajack@crescent.com"
$Subject ="SharePoint Online Storage Report"
#Setup Credentials and connect
$Cred = Get-Credential
Connect-SPOService -Url $AdminSiteURL -Credential $Cred
#Get Storage Usage of All Site collections
$SiteStorage = Get-SPOSite -Detailed | Select Url, StorageUsageCurrent
#Setup the site context for SPUtility SendEmail
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Setup Email
$EmailProperties = New-Object Microsoft.SharePoint.Client.Utilities.EmailProperties
$EmailProperties.From = $EmailTo
$EmailProperties.To = [String[]] $EmailTo
$EmailProperties.Subject = $Subject
$EmailProperties.Body = $SiteStorage | Convertto-html
[Microsoft.SharePoint.Client.Utilities.Utility]::SendEmail($Ctx,$EmailProperties)
$Ctx.ExecuteQuery()
Esto envía correos electrónicos utilizando el método SendMail de SPUtility, con consumo de almacenamiento de todas las colecciones de sitios en SharePoint Online. Aquí, los correos electrónicos de origen y destino son direcciones de correo electrónico dentro de la organización.
SharePoint Online PowerShell para enviar correo electrónico:
Esta vez, usemos el cmdlet nativo Send-MailMessage de PowerShell para enviar un correo electrónico desde un sitio de SharePoint Online. Enviar correos electrónicos en SharePoint Online usando PowerShell es una forma rápida y sencilla de comunicarse con colegas y colaboradores. Para comenzar, abra la consola de PowerShell y escriba el siguiente script:
Import-Module Microsoft.Online.SharePoint.Powershell -DisableNameChecking
#Config Parameters
$AdminSiteURL = "https://crescent-admin.sharepoint.com"
$EmailFrom ="SPAdmin@crescent.com"
$EmailTo =@("salaudeen@crescent.com","Steve@crescent.com")
$EmailSubject ="Site Collection Storage Utilization Report"
$SMTP ="smtp.office365.com"
#Setup Credentials and connect
$Cred = Get-Credential
Connect-SPOService -Url $AdminSiteURL -Credential $Cred
#Get Storage Usage of All Site collections
$SiteStorage = Get-SPOSite -Detailed | Select Url, StorageUsageCurrent | Convertto-html | Out-String
#Send Email
Send-MailMessage -from $EmailFrom -To $EmailTo -Subject $EmailSubject -Body $SiteStorage -BodyAsHtml -smtpserver $SMTP -usessl -Credential $Cred -Port 587
El ejemplo anterior muestra cómo enviar un correo electrónico a varios destinatarios y configurar el asunto y el cuerpo del correo electrónico. Deberá especificar sus propios valores para las variables $AdminSiteURL, $EmailFrom, $EmailTo y $EmailSubject. Si desea agregar algún archivo adjunto al correo electrónico, utilice lo siguiente:
#send-mailmessage in powershell with multiple attachments
$Attachments = "D:\Reports\SiteDeleteRpt1.csv","D:\Reports\SiteDeleteRpt2.csv"
Send-MailMessage -To $EmailTo -From $EmailFrom -Subject $EmailSubject -Body $EmailBody -BodyAsHTML -Attachments $Attachments -SmtpServer $SmtpServer -Credential $Cred -Port 587
SharePoint Online: PnP PowerShell para enviar correo electrónico
También podemos enviar correos electrónicos desde PowerShell en SharePoint Online usando el cmdlet Send-PnPMail. Esto envía un correo electrónico desde el contexto actual del sitio.
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#sharepoint online powershell send email
Send-PnPMail -To salaudeen@crescent.com -Subject "Welcome" -Body "Welcome to Crescent Inc."
Este cmdlet también admite el envío de correos electrónicos desde un usuario del inquilino.
Send-PnPMail -To salaudeen@crescent.com -Subject "Welcome" -Body "Welcome to Crescent Inc." -From Steve@crescent.com -Password "Password of the From User"
Importar desde un archivo CSV - Formatear a una tabla HTML - y enviar un correo electrónico usando PowerShell
En otro requisito, tuve que leer los datos de un archivo CSV, formatearlos en una tabla HTML y luego enviarlos por correo electrónico. Aquí está el script de PowerShell para hacer eso:
#Parameters
$CSVPath = "C:\Temp\ADGroups.csv"
$EmailTo = "Salaudeen@crescent.com"
#Import Data from CSV File
$CSVFile = Import-Csv $CSVPath
#Define CSS Styles
$HeadTag = @"
<style type="text/css">
table {
font-size:11px; color:#333333; border-width: 1px; border-color: #a9c6c9;
border: b1a0c7 0.5pt solid; border-spacing: 1px; border-collapse: separate;
}
th {
border-width: 1px; padding: 5px; background-color:#8064a2; font-size: 14pt; font-weight: 600;
border: #b1a0c7 0.5pt solid; font-family: Calibri; height: 15pt; color: white;
}
td {
border: #b1a0c7 0.5pt solid; font-family: Calibri; height: 15pt; color: black;
font-size: 11pt; font-weight: 400; text-decoration: none; padding:5px;
}
tr:nth-child(even) { background-color: #e4dfec; }
</style>
"@
#Frame Email Body
$EmailBody = $CSVFile | ConvertTo-Html -Head $HeadTag -PreContent "<h1>Site Users and Groups - Report</h1>" | Out-String
#Send Email
Send-PnPMail -To $EmailTo -Subject "Users and Groups Report" -Body $EmailBody
Aquí está el correo electrónico en acción:
PowerShell puede ayudarle a enviar correos electrónicos masivos de forma rápida y sencilla, ahorrándole tiempo y molestias.

