Aller au contenu

PowerShell et STARTTLS


MeowMeow

Messages recommandés

Bonjour à toutes et à tous,

J'essaie d'envoyer des emails pour l'expiration des MDP AD via un script power shell :
 

### Variables modifiables

# Nombre de jours avant l'expiration pour envoyer la notification
$DateThreshold = 31

#Configuration email TTLSSL
$password = "mon mdp"
$userName = "email expéditeur"
[SecureString]$securepassword = $password | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword
[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,TLS11,TLS12'

# Serveur SMTP - Nom du serveur
$SMTPServer = "smtp.office365.com"

# Serveur SMTP - Numéro de port
$SMTPPort = 567



# Serveur SMTP - Adresse e-mail de l'expéditeur
$SMTPSender =  "email expéditeur"

# Serveur SMTP - Encodage Email
$SMTPEncoding =[System.Text.Encoding]::UTF8

# Envoyer une synthèse aux administrateurs
[boolean]$SendReportAdmin = $true

# Adresse e-mail du destinataire pour la synthèse
$SendReportAdminEmail = "mon email"

### Fonctions
Function Send-MailMessageForUser{
    <#
        .SYNOPSIS : Envoyer une notification à un utilisateur dont le mot de passe expire dans X jours (selon seuil)
    #>

    Param([Parameter(Mandatory=$true)][string]$SendMailUserGivenName,
          [Parameter(Mandatory=$true)][string]$SendMailUserSurname,
          [Parameter(Mandatory=$true)][string]$SendMailUserEmail,
          [Parameter(Mandatory=$true)][string]$SendMailUserPrincipalName,
          [Parameter(Mandatory=$true)][string]$SendMailUserPasswordExpirationDate)

    # Corps de l'email pour les utilisateurs
    $SendMailBody=@"
<p>Bonjour $SendMailUserGivenName,</p>
<p>Dans <b>moins de $DateThreshold jours</b>, le mot de passe du compte <b>$SendMailUserPrincipalName</b> va expirer.<br>
<b>Pensez à le changer</b> avant qu'il arrive à expiration (date d'expiration : $SendMailUserPasswordExpirationDate)</p>
Cordialement,<br>
Le service informatique
"@

    # Objet de l'e-mail pour les utilisateurs
    $SendMailObject="$SendMailUserGivenName $SendMailUserSurname : votre mot de passe arrive à expiration !"

    # Envoyer l'e-mail
    Send-MailMessage -UseSsl -Credential $credential -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding  `
        -From $SMTPSender -To $SendMailUserEmail `
        -Subject $SendMailObject `
        -Body $SendMailBody -BodyAsHtml -Port $SMTPPort

}

### Variables
# Date du jour (format FileTime)
$DateToday = (Get-Date).ToFileTime()

# Date de référence (date du jour + nombre jours avant expiration pour la notification)
$DateWithThreshold = (Get-Date).AddDays($DateThreshold).ToFileTime()

# Liste des utilisateurs Active Directory
$UsersInfos = Get-ADUser -Filter { (Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} –Properties "DisplayName", "mail", "msDS-UserPasswordExpiryTimeComputed" | 
                         Select-Object -Property  "GivenName", "Surname","mail", "UserPrincipalName", "msDS-UserPasswordExpiryTimeComputed"

# Initialiser l'objet avec la liste des utilisateurs
$UsersNotifList=@()

# Traiter chaque utilisateur
Foreach($User in $UsersInfos){
    
    if(($User."msDS-UserPasswordExpiryTimeComputed" -lt $DateWithThreshold) -and ($User."msDS-UserPasswordExpiryTimeComputed" -gt $DateToday)){
            
            $UserPasswordExpirationDate = [datetime]::FromFileTime($User."msDS-UserPasswordExpiryTimeComputed")
            $UserObj = New-Object System.Object
            $UserObj | Add-Member -Type NoteProperty -Name GivenName -Value $User.GivenName
            $UserObj | Add-Member -Type NoteProperty -Name Surname -Value $User.Surname
            $UserObj | Add-Member -Type NoteProperty -Name Email -Value $User.mail
            $UserObj | Add-Member -Type NoteProperty -Name UserPrincipalName -Value $User.UserPrincipalName
            $UserObj | Add-Member -Type NoteProperty -Name PasswordExpirationDate -Value ($UserPasswordExpirationDate).ToString('dd/MM/yyyy')

            $UsersNotifList+=$UserObj

            Send-MailMessageForUser -SendMailUserGivenName $User.GivenName -SendMailUserSurname $User.Surname -SendMailUserEmail $User.mail `
                                    -SendMailUserPrincipalName $User.UserPrincipalName -SendMailUserPasswordExpirationDate ($UserPasswordExpirationDate).ToString('d MMMM yyyy')
    }
}

# Faut-il envoyer une synthèse aux administrateurs ?
if(($SendReportAdmin -eq $true) -and ($UsersNotifList.Count -ne 0)){

    # Corps de l'e-mail (sous la forme d'un tableau)
    $SendMailAdminBody = $UsersNotifList | ConvertTo-HTML -PreContent "Bonjour,<br><p>Voici la liste des comptes Active Directory dont le mot de passe expire dans moins de $DateThreshold jours.</p>" | Out-String | ForEach-Object{
                                    $_  -replace "<table>","<table style='border: 1px solid;'>" `
                                        -replace "<th>","<th style='border: 1px solid; padding: 5px; background-color:#014B83; color:#fff;'>" `
                                        -replace "<td>","<td style='padding: 10px;'>"
                                    }

    # Envoyer l'e-mail
    Send-MailMessage -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding - `
        -From $SMTPSender -To $SendReportAdminEmail `
        -Subject "Synthèse - Expiration des mots de passe AD - $(Get-Date -Format dd/MM/yyyy)" `
        -Body $SendMailAdminBody -BodyAsHtml -Port $SMTPPort
}

Et voici l'erreur qui me retourne :

Send-MailMessage : Impossible de se connecter au serveur distant
Au caractère C:\***************\mdpexpi.ps1:73 : 5
+     Send-MailMessage -UseSsl -Credential $credential -Verbose -SmtpServer $SMTPS ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

Vous avez une idée?

Différent sources utilisées : ici et ici

Merci.

Modifié par MeowMeow
Lien vers le commentaire
Partager sur d’autres sites

Même erreur. Avec pare-feu désactivé

 

Send-MailMessage : Erreur lors du traitement. La réponse du serveur était: 5.7.3 STARTTLS is required to send mail [PAZP264CA0081.FRAP264.PROD.OUTLOOK.COM 
2023-02-13T15:15:28.614Z 08DB0D481E93FE2F]
Au caractère Ligne:1 : 1
+ Send-MailMessage -SmtpServer smtp.office365.com

Avec un autre code simple :

 + CategoryInfo          : InvalidOperation : (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpExcep
tion
 + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

 

Modifié par MeowMeow
Lien vers le commentaire
Partager sur d’autres sites

Send-MailMessage : Impossible de lire les données de la connexion de transport : net_io_connectionclosed.
Au caractère Ligne:1 : 1
+ Send-MailMessage -From email@email.fr -To email@email.fr -Subject "Test  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpExcep
   tion
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

 

Lien vers le commentaire
Partager sur d’autres sites

t'utilises bien -UseSsl car je ne le vois pas.

dans ton script c'est écris port 567 mais c'est le 587 pour starttls

et sinon Send-MailMessage est obsolète donc n'est peut être plus supporté pour se logguer sur un smtp office365.

https://stackoverflow.com/questions/74941163/powershell-send-mailmessage-deprecated-future-consequences-for-people-still-re

sinon juste pour être sûr si tu va sur office365 t'arrives bien à te logguer avec les identifiants mis ? et ton ip n'est pas bloquée après toutes ces tentatives infructueuse ça pourrait, à checker sur ton compte office365

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...