PowerShell - Подскажите с кодировкой при отправке по почте

Ответить
Аватара пользователя
VAFER

PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение VAFER »

Для рассылки оповещений накидал вот такой скриптик:





Код:

Код: Выделить всё

param ($Body = "Нет текста" )
$CredUser = "user"
$CredPassword = "123"
$EmailFrom = "user@domen.ru"
$EmailTo = "admin@domen.ru" 
$Subject = "Автоматическое оповещение от SCADA"
$Encoding = [System.Text.Encoding]::UTF8
$SMTPServer = "exchange.domen.ru" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword); 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Но когда запускаю скрипт с параметром, переменная BODY приходит крякозябами.





Код:

Код: Выделить всё

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -command C:\TestScript.ps1 "приточка запустилась"
Аватара пользователя
VAFER

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение VAFER »

и походу приходит только слово "приточка"



подскажите как грамотно решить эту задачу :-)
Аватара пользователя
Kazun

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение Kazun »

1) Кодировка





Код:

Код: Выделить всё

$m = New-Object Net.Mail.MailMessage
$m.BodyEncoding = $Encoding 
$m.Body = $Body
$m.SubjectEncoding = $Encoding
$m.Subject = $Subject
$m.To = $EmailTo
$m.From =$EmailFrom 
$SMTPClient.Send($m)

2)

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -File C:\TestScript.ps1 "приточка запустилась"



PS. В PowerShell V3 у командлета Send-MailMessage есть параметр -Port

Send-MailMessage -From -To -Body -Port -Encoding -UseSsl -SmtpServer
Аватара пользователя
VAFER

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение VAFER »

Предложенный код не выполняется.




Цитата:



"To" является свойством ReadOnly.

C:\testscript.ps1:19 знак:4

+ $m.

Код: Выделить всё

param ($Body = "Нет текста" )
$CredUser = "user"
$CredPassword = "123"
$EmailFrom = "user@domen.ru"
$EmailTo = "admin@domen.ru" 
$Subject = "Автоматическое оповещение от SCADA"
$Encoding = [System.Text.Encoding]::UTF8
$SMTPServer = "exchange.domen.ru" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword); 
$m = New-Object Net.Mail.MailMessage
$m.BodyEncoding = $Encoding 
$m.Body = $Body
$m.SubjectEncoding = $Encoding
$m.Subject = $Subject
$m.To = $EmailTo
$m.From =$EmailFrom 
$SMTPClient.Send($m)
Аватара пользователя
Kazun

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение Kazun »

Моя ошибка:

$m.To = $EmailTo заменить на $m.To.Add($EmailTo)
Аватара пользователя
VAFER

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение VAFER »

Encoding не сработал Изображение



тема нормально, а BODY пришло:



яЁшЄюўър чряєёЄшырё№



причем если без параметра, то приходит читаемые:



Нет текста



я кажется понял в чем фишка

надо CMD файл, который вызывает скрипт, сохранить в другой кодировке



да, все верно

при вызове скрипта с командной строки (что мне в принципе и необходимо) - приходит нормально



СПАСИБО ЗА ПОМОЩЬ Изображение
Аватара пользователя
Kazun

Re: PowerShell - Подскажите с кодировкой при отправке по почте

Сообщение Kazun »

А если так попробовать?



Код:

Код: Выделить всё

$m.Body = $Body
$m.BodyEncoding = $Encoding 
$m.BodyTransferEncoding = "Base64"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»