Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Подскажите с кодировкой при отправке по почте

Ответить
Настройки темы
PowerShell - Подскажите с кодировкой при отправке по почте

Новый участник


Сообщения: 28
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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 "приточка запустилась"

Отправлено: 12:07, 29-03-2013

 

Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 12:11, 29-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:25, 29-03-2013 | #3


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня Win2008 и PowerShell V2

Отправлено: 13:48, 29-03-2013 | #4


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Цитата:
"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)

Отправлено: 14:05, 29-03-2013 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Моя ошибка:
$m.To = $EmailTo заменить на $m.To.Add($EmailTo)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:17, 29-03-2013 | #6


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


Encoding не сработал

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

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

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

Нет текста

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

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

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

Отправлено: 14:44, 29-03-2013 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


А если так попробовать?
Код: Выделить весь код
$m.Body = $Body
$m.BodyEncoding = $Encoding 
$m.BodyTransferEncoding = "Base64"

Отправлено: 15:05, 29-03-2013 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Подскажите с кодировкой при отправке по почте

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Отправка по почте последнего файла .log, созданного по дате и времени alex_frog Скриптовые языки администрирования Windows 0 03-02-2013 17:32
2010 - Иероглифы при отправки календаря по почте evgeniy_oliynik@vk Microsoft Office (Word, Excel, Outlook и т.д.) 8 20-01-2013 09:19
BSOD - при отправке в сон sinitsyn Тест-форум 1 22-03-2012 12:21
CMD/BAT - [решено] Копирование файла по расписанию и его отправка по почте LokkyZ Скриптовые языки администрирования Windows 8 03-10-2011 16:49
Интернет - [решено] Действия с файлами по умолчанию после загрузки/получения по почте fergard Microsoft Windows Vista 2 30-06-2009 10:12




 
Переход