If I want to integrate the mail is this the correct way or if it needs modification, can you please guide me
Connect-AzAccount
# Initialize an empty array to store the results
$expirationDetails = @()
# Get all subscriptions
$subscriptions = Get-AzSubscription
# Loop through each subscription
foreach ($subscription in $subscriptions) {
# Set the context to the current subscription
Set-AzContext -SubscriptionId $subscription.Id
# Get all Key Vaults in the current subscription
$kvnames = Get-AzKeyVault
foreach ($kvitem in $kvnames) {
# Get Key Vault secrets, keys, and certificates
$secrets = Get-AzKeyVaultSecret -VaultName $kvitem.VaultName
$keys = Get-AzKeyVaultKey -VaultName $kvitem.VaultName
$certificates = Get-AzKeyVaultCertificate -VaultName $kvitem.VaultName
# Function to check expiration date and return the expiration DateTime or null for missing values
function Check-Expiration($expiryDate) {
if ($expiryDate) {
return [datetime]$expiryDate # Return the DateTime object if expiration date exists
}
return $null # Return null if expiration date is missing
}
# Function to calculate remaining days
function Get-RemainingDays($expiryDate) {
if ($expiryDate -ne $null) {
$remainingDays = ($expiryDate - (Get-Date)).Days
return $remainingDays
}
return $null # Return null if no expiration date
}
# Process secrets
foreach ($secret in $secrets) {
$expirationDate = Check-Expiration $secret.Expires
$remainingDays = Get-RemainingDays $expirationDate
if ($expirationDate -ne $null) {
$formattedExpirationDate = $expirationDate.ToString("MM/dd/yyyy HH:mm:ss")
} else {
$formattedExpirationDate = "" # Empty string for null expiration dates
}
# Only include items expiring within the next 7 days
if ($remainingDays -le 7 -and $remainingDays -ge 0) {
$expirationDetails += [PSCustomObject]@{
SubscriptionName = $subscription.Name
ResourceGroupName = $kvitem.ResourceGroupName
ResourceName = $kvitem.VaultName # Key Vault name
ObjectName = $secret.Name # Name of the secret
ObjectCategory = "Secret" # Category for KeyVault secret
ExpirationDate = $formattedExpirationDate # Formatted expiration date
ExpiresIn = $remainingDays # Remaining days until expiration
}
}
}
# Process keys
foreach ($key in $keys) {
$expirationDate = Check-Expiration $key.Attributes.Expires
$remainingDays = Get-RemainingDays $expirationDate
if ($expirationDate -ne $null) {
$formattedExpirationDate = $expirationDate.ToString("MM/dd/yyyy HH:mm:ss")
} else {
$formattedExpirationDate = "" # Empty string for null expiration dates
}
# Only include items expiring within the next 7 days
if ($remainingDays -le 7 -and $remainingDays -ge 0) {
$expirationDetails += [PSCustomObject]@{
SubscriptionName = $subscription.Name
ResourceGroupName = $kvitem.ResourceGroupName
ResourceName = $kvitem.VaultName # Key Vault name
ObjectName = $key.Name # Name of the key
ObjectCategory = "Key" # Category for KeyVault key
ExpirationDate = $formattedExpirationDate # Formatted expiration date
ExpiresIn = $remainingDays # Remaining days until expiration
}
}
}
# Process certificates
foreach ($certificate in $certificates) {
$expirationDate = Check-Expiration $certificate.Attributes.Expires
$remainingDays = Get-RemainingDays $expirationDate
if ($expirationDate -ne $null) {
$formattedExpirationDate = $expirationDate.ToString("MM/dd/yyyy HH:mm:ss")
} else {
$formattedExpirationDate = "" # Empty string for null expiration dates
}
# Only include items expiring within the next 7 days
if ($remainingDays -le 7 -and $remainingDays -ge 0) {
$expirationDetails += [PSCustomObject]@{
SubscriptionName = $subscription.Name
ResourceGroupName = $kvitem.ResourceGroupName
ResourceName = $kvitem.VaultName # Key Vault name
ObjectName = $certificate.Name # Name of the certificate
ObjectCategory = "Certificate" # Category for KeyVault certificate
ExpirationDate = $formattedExpirationDate # Formatted expiration date
ExpiresIn = $remainingDays # Remaining days until expiratio
}
}
}
}
}
# Optionally, display the results on the screen
$expirationDetails | Format-Table -Property SubscriptionName, ResourceGroupName, ResourceName, ObjectName, ObjectCategory, ExpirationDate, ExpiresIn
project vaultUri
"@
$result = Search-AzGraph -Query $query
$pwd = ConvertTo-SecureString 'mailtopassword' -AsPlainText -Force
$CredSmtp = New-Object System.Management.Automation.PSCredential ('mail from', $password)$pwd = ConvertTo-SecureString 'mailfrompassword' -AsPlainText -Force
$CredSmtp = New-Object System.Management.Automation.PSCredential ('mail to', $pwd)
$FromMail = "@gmail.com"
$MailTo = "@outlook.com"
$Username = $CredSmtp.UserName
$Password = $CredSmtp.Password
$SmtpServer = "smtp.office365.com"
$Port = 587
$Message = New-Object System.Net.Mail.MailMessage $FromMail, $MailTo
$MessageSubject = "Sending Automation results"
$Message.IsBodyHTML = $true
$Message.Subject = $MessageSubject
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer, $Port)
$Smtp.EnableSsl = $true
$Smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
$Smtp.Send($Message)