Powershell – jak poslat email

Existuje několik různých způsobů, jak poslat email pomocí Powershellu:

Odeslání emailu pomocí Outlooku

Outlook nemusí být spuštěn, aby následující funkce fungovala (první řádka skriptu otevírá novou instanci Outlooku). Pokud chcete odeslat email více příjemcům, tak je oddělujte ve skriptu čárkou:

Start-Process Outlook
$o = New-Object -com Outlook.Application
$mail = $o.CreateItem(0)
$mail.subject = "Testovací zpráva"
$mail.body = "První řádka`nDruhá řádka`nTřetí řádka"
$mail.To = "muj.email@mojedomena.cz"
$mail.Attachments.Add("C:\pokus.txt")
$mail.Send()
$o.Quit()

Odeslat email pomocí cmdletu

Opět, pokud chcete odeslat zprávu více příjemcům, pak je oddělujte čárkou. A všimněte si outlookového zápisu emailové adresy. Příklad je převzat z nápovědy.

send-mailmessage -to "User01 <user01@example.com>" -from "ITGroup <itdept@example.com>" -cc "User02 <user02@example.com>" -bcc "ITMgr <itmgr@example.com>" -subject "Don't forget today's meeting!" -credential domain01\admin01 -useSSL

Doplňující informace

Ověření (validace) emailové adresy

1. způsob pomocí .NET ()

function isEmailAddress($object) {
($object -as [System.Net.Mail.MailAddress]).Address -eq $object -and $object -ne $null}
isEmailAddress "tobias"
isEmailaddress "tobias@powershell.com"
isEmailAddress $null

2. způsob pomocí regulárního výrazu

"My email is tobias.weltner@email.de and also tobias@powershell.de" |
Select-String -AllMatches '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b' |
Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value

Pozor Powershell vyhledá jen první výraz! Pokud chcete vyhledat všechny shodné výrazy musíte použít .NET jako v následujícím skriptu:

$text = 'multiple emails like tobias.weltner@email.de and tobias@powershell.de in a string'
$emailpattern = '(?i)\b([A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4})\b'

$emails = ([regex]$emailpattern).Matches($text) |
  ForEach-Object { $_.Groups[1].Value }
  
$emails[0]

"*" * 100

$emails