Functions/Test/Test-RSCEmail.ps1

################################################
# Function - Test-RSCEmail - Sending test emails from the RSC Reporting module
################################################
Function Test-RSCEmail {

<#
.SYNOPSIS
Tests the ability for you to be able to send emails via a local SMTP server given the parameters you specify.
 
.DESCRIPTION
A wrapper that sends a test email using the PowerShell Send-MailMessage default function.
 
.PARAMETER EmailTo
Specify the email to send to I.E recipient@lab.local
.PARAMETER EmailFrom
Specify the email to send from I.E reporting@lab.local
.PARAMETER SMTPServer
Specify your local SMTP server name or IP address which will accept you relaying/sending emails through it from the host/user running your script.
.PARAMETER SSLRequired
Switch to enable or disable SSL on the SMTP connection, only enable if required.
 
.OUTPUTS
Returns the result of the attempt to send an email.
 
.EXAMPLE
Test-RSCEmail -SMTPServer "localhost" -EmailTo "recipient@lab.local" -EmailFrom "reporting@lab.local"
This sends the email to a locally installed SMTP server relay on the host running the script (I.E hMailServer with basic Windows Mail Client)
 
.NOTES
Author: Joshua Stenhouse
Date: 05/11/2023
#>

################################################
# Paramater Config
################################################
    Param
    (
        $EmailTo,$EmailFrom,$SMTPServer,[switch]$SSLRequired
    )

# Hard coding test
$EmailBody = "This is a test email from the Rubrik RSC Reporting reporting PowerShell module.."
$EmailSubject = "PowerShell Test Email"
$Attachments = $null

# Checking function hasn't been passed multiple To emails in a string, formatting if so
IF($EmailTo -match ",")
{
$EmailTo = $EmailTo.Split(",")
}
#####################
# With SSL
#####################
IF ($SSLRequired)
{
# Checking whether attachment has been specified
IF ($Attachments -ne $null)
{
# Sending email with attachments
Try
{
Send-MailMessage -To $EmailTo -BodyAsHtml -Body $EmailBody -Subject $EmailSubject -From $EmailFrom -Attachments $Attachments -SmtpServer $SMTPServer -UseSSL
$EmailSent = $TRUE
}
Catch{$EmailSent = $FALSE}
}
ELSE
{
# Sending email without attachments
Send-MailMessage -To $EmailTo -BodyAsHtml -Body $EmailBody -Subject $EmailSubject -From $EmailFrom -SmtpServer $SMTPServer -UseSSL
$EmailSent = $TRUE
}
Catch{$EmailSent = $FALSE}
}
ELSE
{
#####################
# No SSL
#####################
# Checking whether attachment has been specified
IF ($Attachments -ne $null)
{
# Sending email with attachments
Try
{
Send-MailMessage -To $EmailTo -BodyAsHtml -Body $EmailBody -Subject $EmailSubject -From $EmailFrom -Attachments $Attachments -SmtpServer $SMTPServer
$EmailSent = $TRUE
}
Catch{$EmailSent = $FALSE}
}
ELSE
{
# Sending email without attachments
Try
{
Send-MailMessage -To $EmailTo -BodyAsHtml -Body $EmailBody -Subject $EmailSubject -From $EmailFrom -SmtpServer $SMTPServer
$EmailSent = $TRUE
}
Catch{$EmailSent = $FALSE}
}
}

# Writing status
$EmailStatus = "EmailSent: $EmailSent"

# Returning status
Return $EmailStatus
# End of function
}