Подскажите с кодировкой при отправке по почте
Для рассылки оповещений накидал вот такой скриптик:
Код:
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 "приточка запустилась"
|
и походу приходит только слово "приточка"
подскажите как грамотно решить эту задачу :-)
|
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
|
У меня Win2008 и PowerShell V2 :)
|
Предложенный код не выполняется.
Цитата:
"To" является свойством ReadOnly.
C:\testscript.ps1:19 знак:4
+ $m. <<<< To = $EmailTo
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Исключение при вызове "Send" с "1" аргументами: "Необходимо указать получателя."
C:\testscript.ps1:21 знак:17
+ $SMTPClient.Send <<<< ($m)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
|
я сделал вот так, мб сам накосячил ?! :)
Код:
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)
|
Моя ошибка:
$m.To = $EmailTo заменить на $m.To.Add($EmailTo)
|
Encoding не сработал :)
тема нормально, а BODY пришло:
яЁшЄюўър чряєёЄшырё№
причем если без параметра, то приходит читаемые:
Нет текста
я кажется понял в чем фишка
надо CMD файл, который вызывает скрипт, сохранить в другой кодировке
да, все верно
при вызове скрипта с командной строки (что мне в принципе и необходимо) - приходит нормально
СПАСИБО ЗА ПОМОЩЬ :bow:
|
А если так попробовать?
Код:
$m.Body = $Body
$m.BodyEncoding = $Encoding
$m.BodyTransferEncoding = "Base64"
|
Время: 19:45.
© OSzone.net 2001-