{"id":647,"date":"2023-08-24T11:18:02","date_gmt":"2023-08-24T10:18:02","guid":{"rendered":"https:\/\/van-daag.nl\/?p=647"},"modified":"2023-08-24T11:18:04","modified_gmt":"2023-08-24T10:18:04","slug":"email-when-password-is-going-to-expire","status":"publish","type":"post","link":"https:\/\/van-daag.nl\/?p=647","title":{"rendered":"Email when password is going to expire"},"content":{"rendered":"\n<p>Currently where I work there was an mail send when password is going to expire. That stopped (External party). So I created my own to inform the users when its going to expire.<\/p>\n\n\n\n<p>This script is runned daily on a server with domain tools installed.<\/p>\n\n\n\n<p>On M365 (If used) via <strong>admin center<\/strong>, mail account (License needed). Tab <strong>mail<\/strong>, <strong>Manage email apps<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"502\" src=\"https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-5.png?resize=640%2C502&#038;ssl=1\" alt=\"\" class=\"wp-image-651\" srcset=\"https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-5.png?w=681&amp;ssl=1 681w, https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-5.png?resize=300%2C235&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>Enable the last option (Default its disabled) <strong>Authenticated SMTP<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"389\" src=\"https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-6.png?resize=534%2C389&#038;ssl=1\" alt=\"\" class=\"wp-image-652\" srcset=\"https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-6.png?w=534&amp;ssl=1 534w, https:\/\/i0.wp.com\/van-daag.nl\/wp-content\/uploads\/2023\/08\/image-6.png?resize=300%2C219&amp;ssl=1 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n\n\n\n<p><br>To change in the script below:<br>Searchbase (Row 8)<br>HTML email body (Start Row 45)<br>Subject of the email (Row 86)<br>From mail address (Row 88)<br>From mail address and password (Row 101) This can be scripted that its not in the script but locally encrypted stored.<\/p>\n\n\n\n<pre title=\"PasswordageMail.ps1\" class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell line-numbers\">$currentDate = (Get-Date).tostring(\u201cdd-MM-yyyy HH:mm:ss\")\r\n$currentDateymd = (Get-Date).tostring(\u201cyyyy-MM-dd\")\r\n\r\n#when to mail\r\n$Daystomail = 60,30,10,5,1\r\n\r\n### Change the SearchBase to specify location. Or remove to search over all accounts\r\n$users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} \u2013Properties \"mail\", \"msDS-UserPasswordExpiryTimeComputed\", \"GivenName\", \"SN\" -SearchBase \"OU=Users,OU=XXX,DC=XXX,DC=XXX,DC=XX\" \r\n\r\n\r\nForeach ($user in $users)\r\n{\r\n\r\n$PWage = $user | Select-Object -Property @{Name=\"ExpiryDate\";Expression={[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\")}} \r\n$PWage = $PWage -replace '@{ExpiryDate=','' -replace '}',''\r\n$Length = $PWage.Length\r\n\r\n#Date time notation is not the same length in the AD.\r\n\r\nIf ($Length -eq 18)\r\n{\r\n$PWage2 = [Datetime]::ParseExact($PWage, 'dd-MM-yyyy H:mm:ss', $null)\r\n$PWage3 = $PWage2.ToString(\u201cyyyy-MM-dd\")\r\n$PWage4 = $PWage2.ToString(\u201cdd-MM-yyyy\")\r\n}\r\nIf ($Length -eq 19)\r\n{\r\n$PWage2 = [Datetime]::ParseExact($PWage, 'dd-MM-yyyy HH:mm:ss', $null)\r\n$PWage3 = $PWage2.ToString(\u201cyyyy-MM-dd\")\r\n$PWage4 = $PWage2.ToString(\u201cdd-MM-yyyy\")\r\n\r\n}\r\n\r\n#calculate the days\r\n$Daysleft = New-TimeSpan -Start $currentDateymd -end $PWage3\r\n#remove Time\r\n$Daysleft = $Daysleft -replace '.00:00:00',''\r\n$usernaam = $user.GivenName + \" \" + $user.SN\r\n$Useremail = $user.mail\r\n\r\n\r\nIf ($Daystomail -contains $Daysleft)\r\n{\r\n$count ++\r\n$Body = @\"\r\n&lt;style>\r\nh1, h5, th { text-align: center; font-family: Calibri; }\r\n\r\n\r\n&lt;html>\r\n    &lt;body>\r\n    &lt;span lang=NL style='font-family:\"Calibri\"font-size:10.0pt;line-height:106%;color:black'>\r\n    Beste $usernaam,&lt;br>\r\n    &lt;br>\r\n    Je windows wachtwoord verloopt over $Daysleft dagen.&lt;br>\r\n    Uiterlijk op $PWage4 moet je het wachtwoord aanpassen&lt;br>\r\n    &lt;br>\r\n    Wachtwoord kan je aanpassen op kantoor of als je met VPN verbonden bent.&lt;br>\r\n    Druk op CTRL + ALD + DELETE en ga dan naar wachtwoord wijzigen.\r\n\r\n\r\n\r\n&lt;br>\r\n&lt;br>\r\n&lt;html>\r\n&lt;head>\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/>\r\n&lt;\/head>\r\n&lt;body lang=SV>\r\n&lt;span style='font-family:\"Calibri\";font-size:9pt;color:black;'>Met vriendelijke groet \/ Kind regards,&lt;\/span>\r\n&lt;BR>\r\n&lt;BR>\r\n\r\n\r\n\r\n&lt;\/body>\r\n&lt;\/html>\r\n\r\n&lt;br>\r\nDit is een automatisch gegenereerd bericht.&lt;br>\r\n&lt;br>\r\n&lt;\/span>\r\n&lt;\/style>\r\n\"@\r\n\r\n$subject = \"Je windows wachtwoord verloopt over $Daysleft dagen\"\r\n\r\n$EmailFrom  = \"&lt;EMAIL ADDRES FROM>\"\r\n$MessageToadd= \"$Useremail\"\r\n\r\n\r\n\r\n\r\n$SMTPServer = \"smtp.office365.com\"\r\n$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$MessageToadd,$subject,$Body)\r\n$SMTPMessage.IsBodyHTML = $true\r\n$Port = 587\r\n\r\n$SMTPClient = New-Object Net.Mail.SmtpClient($SMTPServer, $Port) \r\n$SMTPClient.EnableSsl = $true \r\n$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(\"&lt;EMAIL ADDRES FROM>\", \"&lt;PASSWORD>\"); \r\n$SMTPClient.Send($SMTPMessage)\r\n\r\n\r\r\n\r\n}\r\n\r\n}\r\n\r\nRemove-Variable * -ErrorAction SilentlyContinue<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Currently where I work there was an mail send when password is going to expire. That stopped (External party). So I created my own to inform the users when its going to expire. This script is runned daily on a server with domain tools installed. On M365 (If used) via admin center, mail account (License [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[34,53,40,11],"tags":[],"class_list":["post-647","post","type-post","status-publish","format-standard","hentry","category-active-directory","category-blogs","category-m365","category-powershell-script"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/posts\/647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/van-daag.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=647"}],"version-history":[{"count":3,"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/posts\/647\/revisions"}],"predecessor-version":[{"id":653,"href":"https:\/\/van-daag.nl\/index.php?rest_route=\/wp\/v2\/posts\/647\/revisions\/653"}],"wp:attachment":[{"href":"https:\/\/van-daag.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/van-daag.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/van-daag.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}