Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Подскажите с кодировкой при отправке по почте (http://forum.oszone.net/showthread.php?t=257379)

VAFER 29-03-2013 12:07 2121372

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

Код:

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 29-03-2013 12:11 2121376

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

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

Kazun 29-03-2013 12:25 2121387

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 29-03-2013 13:48 2121443

У меня Win2008 и PowerShell V2 :)

VAFER 29-03-2013 14:05 2121457

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

Цитата:

"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)


Kazun 29-03-2013 14:17 2121472

Моя ошибка:
$m.To = $EmailTo заменить на $m.To.Add($EmailTo)

VAFER 29-03-2013 14:44 2121490

Encoding не сработал :)

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

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

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

Нет текста

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

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

СПАСИБО ЗА ПОМОЩЬ :bow:

Kazun 29-03-2013 15:05 2121512

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

$m.Body = $Body
$m.BodyEncoding = $Encoding
$m.BodyTransferEncoding = "Base64"



Время: 19:45.

Время: 19:45.
© OSzone.net 2001-