PowerShell: wysyłka email z konta Microsoft 365

Jak wysłać maila z użyciem PowerShell i konta Microsoft 365? Jak wysłać wiadomość mailową skryptem używając Office 365? Mam na to gotowe rozwiązanie.

Aby wysyłać maila z użyciem PowerShell użyjemy polecenia Send-MailMessage. Wcześniej jednak musimy odpowiednio skonfigurować zarówno usługę Microsoft jak i skrzynkę której będziemy używać – tutaj dokładny opis.

Jeżeli skonfigurujemy obsługę SMTP sam skrypt nie będzie zbytnio skomplikowany, ważny jest odpowiedni adres serwera, port, użycie SSL/TLS. Całość wygląda następująco:

$credentials=new-object Management.Automation.PSCredential “office@sprawdzone.it”, (“Haslo!trudn3” | ConvertTo-SecureString -AsPlainText -Force)

$param = @{
    SmtpServer = 'smtp.office365.com'
    Port = 587
    UseSsl = $true
    Credential  = $credentials
    Encoding = 'utf8'
    From = 'office@sprawdzone.it'
    To = 'lukasz@mail.pl'
    Subject = '[Test] Skrypt do maila '
    Body = 'Mail wyslany z uzyciem skryptu'
    BodyAsHtml = $true
    Attachments = 'C:\data\raport.pdf'
}

Send-MailMessage @param

Takiego skryptu możecie używać do wysyłania automatycznych powiadomień, raportów i co wam tylko jeszcze do głowy przyjdzie!

Uwaga: jeżeli podczas wysyłania wiadomości z użyciem skryptu pojawi Wam się komunikat błędu o treści: Unable to read data from the transport connection: net_io_connectionclosed.

Send-MailMessage : Unable to read data from the transport connection: net_io_connectionclosed.

Wystarczy że wymusimy użycie protokołu TLS w wersji 1.2, rozwiązaniem jest jako administrator wydanie polecenia:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Od teraz wasz skrypt będzie działał poprawnie a emaile będą docierać do adresatów.