Показать полную графическую версию : Подскажите с кодировкой при отправке по почте
Для рассылки оповещений накидал вот такой скриптик:
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"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC