Public/Network/Test-IsValidEmailAddress.ps1
function Test-EmailAddress { <# .SYNOPSIS Tests validity if specified string is an email address. .DESCRIPTION Casts the passed value as "System.Net.Mail.MailAddress" data type. If successful it parses string into the properties: DisplayName, User, Host, Address White space normally delimits the DisplayName from the address so an extra check is performed to see if EmailAddress specified matches the resolved Address property .EXAMPLE Test-EmailAddress -EmailAddress "user@gmail.com" Would return: True .EXAMPLE Test-EmailAddress "bademail" Would return: False .EXAMPLE Test-EmailAddress "test user@gmail.com" -verbose Would return: VERBOSE: You entered email address: [test user@gmail.com] VERBOSE: Address resolved to: [user@gmail.com] VERBOSE: [user@gmail.com] does not match [test user@gmail.com] VERBOSE: The address is NOT valid. False .EXAMPLE Test-EmailAddress -EmailAddress "user@gmail.com" -verbose Would return: VERBOSE: You entered email address: [user@gmail.com] VERBOSE: Address resolved to: [user@gmail.com] VERBOSE: Address valid, no guarantee that address [user@gmail.com] exists. #> [CmdletBinding(ConfirmImpact = 'None')] [Outputtype('bool')] Param ( [parameter(Mandatory, HelpMessage = 'Add help message for user', Position = 0, ValueFromPipeLine, ValueFromPipeLineByPropertyName)] [Alias('Address')] [string] $EmailAddress ) begin { Write-Invocation $MyInvocation } process { Out-Verbose "You entered email address: [$($EmailAddress)]" try { $temp = [System.Net.Mail.MailAddress] $EmailAddress Out-Verbose "Address resolved to: [$($temp.Address)]" if ($temp.Address -ne $EmailAddress) { Out-Verbose "[$($temp.Address)] does not match [$($EmailAddress)]" Write-Output -InputObject $false } else { Out-Verbose "Address valid, no guarantee that address [$($EmailAddress)] exists." Write-Output -InputObject $True } } catch { Out-Verbose 'The address is NOT valid.' Write-Output -InputObject $False } } end { Out-Verbose $fxn "Complete." } } |