jueves, 4 de junio de 2020

Las alertas no llegan cuando se agrega o modifica un elemento en SharePoint 2016

Realmente esto puede suceder hasta donde se, en todas las versiones de SharePoint, porque a mi juicio es un error de diseño en SharePoint.

El tema es que SharePoint tiene un trabajo o Job llamado "Immediate Alerts" que ejecuta de forma predeterminada cada 5 minutos y lo que hace es enviar todas aquellas alertas que cumplan con las condiciones que el usuario definió al momento de subscribirse o subscribir a un usuario dentro de la biblioteca o lista de SharePoint.

El tema es que como fue diseñado este Job de forma errada es que asume que todos los usuarios tiene correos validados e intenta el envío de la alerta indefinidamente, como se muestra en el siguiente log:

Beginning attempt 1 to send mail to recipients
OWSTIMER.EXE SharePoint Foundation E-Mail Medium Attempting to send mail to recipients
Error: SmtpException while sending email: System.Net.Mail.SmtpFailedRecipientException: Mailbox unavailable. The server response was: 5.7.1 Unable to relay    

Beginning attempt 2 to send mail to recipients
OWSTIMER.EXE SharePoint Foundation E-Mail Medium Attempting to send mail to recipients
Error: SmtpException while sending email: System.Net.Mail.SmtpFailedRecipientException: Mailbox unavailable. The server response was: 5.7.1 Unable to relay    

Beginning attempt 3 to send mail to recipients
OWSTIMER.EXE SharePoint Foundation E-Mail Medium Attempting to send mail to recipients
Error: SmtpException while sending email: System.Net.Mail.SmtpFailedRecipientException: Mailbox unavailable. The server response was: 5.7.1 Unable to relay    
 
y así hasta que tenga éxito en enviarlo, pero nunca lo va poder enviar porque no existe Realy definido para la cuenta que intenta enviar, por temas de privacidad no comparto esta información. 

Lo que provoca este problema es que el Job "Immediate Alerts" se queda congelado, ya no avanza mas y el resto de alertas las deja de enviar, solo envia las que estan antes de la cuenta que tiene problema.  Que en el caso que me toco revisar era todas las cuentas de un domino en especial que no tenian un relay especificado para que pudieran irse o dieran salida de SharePoint.

Mientras tecnología se encargada de corregir este tema, lo que hice fue sacar un inventario de las alertas y luego eliminar todas las alertas de dicho dominio.

A continuación les dejo el script del inventario de alertas en powershell:

----GetAllusersAlerts.ps1----
param([string]$url, [string]$scope, [string]$filePath)

"Title;UserName;LoginName;AlertType;List;Frequency;DeliveryChannels;EventType;AlwaysNotify" | Out-File -FilePath $filePath 
function listAlert($SPweb )
{
    $alerts = $SPweb.Alerts
	$alertscount = $alerts.count
	for($i= 0; $i -lt $alertscount;$i++)
	{
	    $alert = $alerts[$i]
		$id = $alert.ID
		write-host -f Green $alert.Title
		"User Name    - " + $alert.User.Name
		"Title        - " + $alert.Title
        "Alert Type   - " + $alert.AlertType 
        "Alert List   - " + $alert.List
		"Frequency    - " + $alert.AlertFrequency
		"Delivery Via - " + $alert.DeliveryChannels
		"Change Type  - " + $alert.EventType
		"Alert User   - " + $alert.User
        "Always Notify- " + $alert.AlwaysNotify    
		Write-Host "=================================="
		$alert.Title+";"+$alert.User.Name+";"+$alert.User+";"+$alert.AlertType+";"+$alert.List+";"+$alert.AlertFrequency+";"+$alert.DeliveryChannels+";"+$alert.EventType+";"+$alert.AlwaysNotify    | Out-File -FilePath $filePath -Append
    }
}

if($url)
{
    if($scope -ne "web")
    {
	    $SPwebApp = Get-SPWebApplication $Url
	    foreach ($SPsite in $SPwebApp.Sites)
	    {
		    foreach($SPweb in $SPsite.AllWebs)
		    {
			   listAlert $SPweb
			   $SPWeb.Dispose()  
		    }
		    $SPsite.Dispose()
        }
	}
    else
    {
        $SPweb = get-spweb $url
        listAlert $SPweb
		$SPWeb.Dispose()  
    }
}
else
{
	write-host "Url es un parametro obligatorio"
}

write-host "End process.."
---end of file----

SharePoint4Fun!,

JMHO

No hay comentarios.: