У меня были похожие проблемы, когда некоторые из COM-объектов, кажется, не заполняются полностью (похоже, что-то связано с настройкой корпоративного Outlook - возможно, антивирусные меры?). Однако, если вы закомментируете строку $msg.Recipients.Add("me@example.com")
и добавите $msg.Display()
, вы можете добавить получателей и отправить их оттуда. Не очень хорошее решение.
На мой вопрос меня направили в сторону веб-службы Exchange (EWS), поэтому я скачал EWS API 2.2 и использовал следующее:
Add-Type -LiteralPath "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2010_SP1
$service.AutodiscoverUrl(‘me@mydomain.com’, {$true})
$msg = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage($service)
$msg.Subject = "Sent from Powershell EWS"
$msg.Body = "<html><body><h1>TESTING</h1><p>This is a test message sent from Powershell!</p></body></html>"
$msg.ToRecipients.Add("me@mydomain.com")
$msg.SendAndSaveCopy()
Похоже, это работало довольно хорошо и сохранило сообщение в моей отправленной папке.
Если вам не нужно сохранять элемент в папке отправляемых элементов (например, добавляя себя в качестве получателя), вероятно, проще использовать Send-MailMessage с помощью «NT AUTHORITY \ ANONYMOUS LOGON»:
$emptySecStr = New-Object System.Security.SecureString
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "NT AUTHORITY\ANONYMOUS LOGON", $emptySecStr
Send-MailMessage -SmtpServer $smtpServerName -Credential $creds -From $sendingAddr -to $sendToArray -Cc $sendCCArray -BodyAsHtml -body $htmlBody -Subject $subject
Я получил эту технику из большого обсуждения здесь .