Entra / Microsoft 365 · Exchange Online
Send welcome email
How to send a welcome message to new mailboxes using SMTP AUTH.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-ExchangeOnline
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
param([int] $LookbackDays = 7)[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12# Date to Check for new accounts - we use the last 7 days here, but that's easily changable.[string]$CheckDate = (Get-Date).AddDays(-$LookbackDays)# Make sure that we have valid credentialsIf (-not $O365Cred) { #Make sure we have credentials$O365Cred = (Get-Credential)}# Message is from the logged in account$MsgFrom = $O365Cred.UserName ; $SmtpServer = "smtp.office365.com" ; $SmtpPort = '587'# Define some variables for the message#HTML header with styles$htmlhead="<html><style>BODY{font-family: Arial; font-size: 10pt;}H1{font-size: 22px;}H2{font-size: 18px; padding-top: 10px;}H3{font-size: 16px; padding-top: 8px;}</style>"#Header for the message$HtmlBody = "<body><h1>Welcome to Our Company</h1><p><strong>Generated:</strong> $(Get-Date -Format g)</p><h2><u>We're Pleased to Have You Here</u></h2>"# Find all mailboxes created in the target period$Users = (Get-ExoMailbox -Filter "WhenMailboxCreated -gt '$CheckDate'" -RecipientTypeDetails UserMailbox -ResultSize Unlimited -Properties WhenMailboxCreated | Select WhenMailboxCreated, DisplayName, UserPrincipalName, PrimarySmtpAddress)ForEach ($User in $Users) {$EmailRecipient = $User.PrimarySmtpAddressWrite-Host "Sending welcome email to" $User.DisplayName$htmlHeaderUser = "<h2>New User " + $User.DisplayName + "</h2>"$htmlline1 = "<p><b>Welcome to Office 365</b></p>"$htmlline2 = "<p>You can open Office 365 by clicking <a href=http://www.portal.office.com>here</a> </p>"$htmlline3 = "<p>Have a great time and be sure to call the help desk if you need assistance.</p>"$htmlbody = $htmlheaderUser + $htmlline1 + $htmlline2 + $htmlline3 + "<p>"$HtmlMsg = "</body></html>" + $HtmlHead + $HtmlBody# Construct the message parameters and send it off...$MsgParam = @{To = $EmailRecipientFrom = $MsgFromSubject = "A Hundred Thousand Welcomes"Body = $HtmlMsgSmtpServer = $SmtpServerPort = $SmtpPortCredential = $O365Cred }Send-MailMessage @msgParam -UseSSL -BodyAsHTML}}
Parameters
ParameterDefaultNotes
-LookbackDays7How many days back to search for newly created mailboxes or recent activity.Attribution
Author
Office365itpros