Задать вопрос
@Deni_Noob
Немного - там, немного - сям

Как обработать ошибки send-mailmessage (try-catch)?

В процессе написания скрипта возникло желание обрабатывать ошибки send-mailmessage при помощи обработки try-catch. Все бы хорошо, но catch не ловит ошибки от командлета send-mailmessage.

Самая простая конструкция, которая должна, вроде бы, работать:
try {
    Send-MailMessage -SmtpServer 'SMTP.server.LOCAL123' `
        -From 'FromMail@mail.work' `
        -To 'ToMail@mail.work' `
        -Subject 'Some Subject' `
        -Body 'Some text to body' `
} catch {
    $_
}

Не отрабатывает, и выдает ошибку в стандартном виде:
Send-MailMessage : Невозможно разрешить удаленное имя: 'SMTP.server.LOCAL123'
C:\Users\username\Documents\tmp.ps1:76 знак:9
+         Send-MailMessage @EMail
+         ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-Ma  
   ilMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage


Облазил пол интернета, в основном пишут как отправлять ошибки при помощи send-mailmessage, нежели как отловить их и записать в лог от самого командлета.
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    PowerShell для начинающих: Основы для IT-специалистов
    1 неделя
    Далее
  • Skillbox
    Системный администратор с нуля
    6 месяцев
    Далее
  • Яндекс Практикум
    Специалист по информационной безопасности
    11 месяцев
    Далее
Решения вопроса 1
@NortheR73
системный инженер
Облазил пол интернета
странный у вас интернет...
try {
    Send-MailMessage ... -ErrorAction Stop
}
catch {
    $errorMessage = $_.Exception.Message
    $errorMessage | Out-File -FilePath C:\temp\MailErrorLog.txt
}

З.Ы. Send-MailMessage - выпиливается как устаревший командлет. Вместо него рекомендуется использовать, например, класс System.Net.Mail.SmtpClient
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@HomeMan
Там каша в голове.
В смысле, в примере одно, а в выхлопе другое.
В выхлопе система не может понять, кто же это SMTP.server.LOCAL123. А в примере другое, бывает, шифруемся.
Чтобы кашу не разгребать из чужой головы, нужно не бояться приводить реальные данные.
В данном случае это localnet.
И отвечает System.Net.Mail.SmtpClient.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы