![]() |
Отправка сообщения с помощью PowerShell
Всем привет, у меня Microsoft Exchange Server 2010 ver. - 14.02.0318.004
Пытаюсь с помощью PowerShell отправить письмо с вложением. Так все отлично, письмо приходит: Код:
Send-MailMessage -From "..." -To "..." -Subject "Test #01" -Body "Just a test message." -SMTPServer "..." Код:
Send-MailMessage -From "..." -To "..." -Subject "Test #01" -Body "Just a test message." -Attachments "E:\ABC.txt" -SMTPServer "..." Код:
$Server = "..." # SMTP Сервер Что это за прикол? куда копать ? Я сервак не админю, но мне необходимо сделать авторассылку, стоит такая антиспам штука GFI MailEssentials, может это она может блокировать письма с вложениями, а без пропускать, от одной и той же внутренней почты? Или это в Exchange Server'е есть подобная защита ? |
Цитата:
|
Здравствуйте!
Помогите, пожалуйста, разобраться с проблемой. Нужно отправить письмо из Powershell. Пользуюсь этим скриптом: Код:
$EmailFrom = 'user1@mail.ru' Код:
Исключение при вызове "Send" с "4" аргументами: "Неправильная последовательность команд. Ответ сервера: Administrative prohibition -- authorization required. Users in your domain are not allowed to send email without authorizati Код:
Исключение при вызове "Send" с "4" аргументами: "Неправильная последовательность команд. Ответ сервера: 5.5.4 Error: send AUTH command first." |
Причину явно указали - неправильные учетные данные. Проверьте правильность логина и пароля.
$SMTPClient.Credentials = New-Object Net.NetworkCredential("user1@mail.ru", 'password') |
спасибо. проблема действительно была в пароле, точнее в кавычках обрамляющих пароль.
В пароле содержится $ и если обрамлять такой пароль двойными кавычками, то в Powershell ISE он выделяется цветом как переменная. Одинарные кавычки помогли. |
Подскажите, пожалуйста, что нужно сделать чтобы приложенные файлы с русскими именами отображались в правильной кодировке.
|
Попробовать задать свойство NameEncoding:
Код:
$att = New-Object System.Net.Mail.Attachment("C:\Windows\notepad.exe") |
не помогло
|
Если указать имя меньше 30 символов ,проблема сохраняется?
|
Если имя меньше 30 символов, все норм.
Можно ли "настроить правильную кодировку" для имен длиннее 30 символов? |
Попробуйте установить обновление - http://support.microsoft.com/kb/2402064
|
спасибо большое! обновление помогло.
|
Здравствуйте!
Есть ли возможность получить результат отправки письма? Например письмо успешно отправлено или его не удалось отправить. |
Цитата:
|
Нет, можно лишь только предполагать, что если метод Send ничего не вернул - то успех, в другом случаи возникнет исключение.
|
Kazun, не совсем так. Нельзя получить результат доставлено ли сообщение, а вот что отправлено — вполне можно. И как раз по обработке возникающих исключений, буде таковые.
|
Ловить исключение trap`ом?
Такой код почему-то всегда возвращает 0. Код:
param ( |
$res=-1 исправить на $script:res
Но лучше использовать try{$smtpclient.Send($Message)} catch {-1} |
Kazun, нужна Ваша помощь!
Требуется перенастроить скрипт на отправку с помощью SSL и через порт 465. При добавлении Код:
$SmtpClient.Port = 465 Код:
Исключение при вызове "Send" с "1" аргументами: "Время ожидания операции истекло." |
Для yandex измените порт с 465 на 587.
|
спасибо!
|
Сенк за тему, скопипастил чуть поправил, но теперь хочу после отправки вложений переместить их в другую папку.
Write-Verbose "Добавляем получателей" $To | ForEach-Object {$Message.To.Add($_)} Write-Verbose "Отправляем сообщение" $smtpclient.Send($Message) #$res Start-Sleep -s 10 Get-ChildItem "d:\scripts\Send1\"|where { ! $_.PSIsContainer } |select -expand fullname | foreach-object {move-item $_ -destination "d:\scripts\Send1\old\"} Move-Item : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. строка:35 знак:116 + Get-ChildItem "d:\scripts\Send1\"|where { ! $_.PSIsContainer } |select -expand fullname | foreach-object {move-item <<<< $_ -destination "d:\scripts\Send1\old\"} + CategoryInfo : WriteError: (D:\scripts\Send1\report_77843_20140926:FileInfo) [Move-Item], IOException + FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand Как только закрываю окно powershell.exe файлы можно перемещать, как ему сказать отпустить файлы ? что бы можно было их перенести в одном скрипте. |
Воспользоваться методом Dispose() для объекта класса Net.Mail.Attachment, а лучше использовать командлет Send-MailMessage.
|
А как его засунуть в цикл и в одно письмо вложить 10 файлов - вот так не работает %)
Dispose() так и не понял толком куда вставить, пробовал по разному на разные переменные - не работает. $body = Get-ChildItem | Select -Exp FullName | Out-String if($body) { send-mailmessage -to "User01 <admin@t.com.ua>" -from "User02 <it@a.ua>" -Attachment $body -subject "Test mail" -SmtpServer mx.a.ua -Body "test" |
1) Дохтур, у меня ЭТО! (с)
2) Изменить $body на : Код:
$body = Get-ChildItem | Select -Exp FullName |
Сенк, работает.
Но опять же с перемещением отправленных вложений возникает та-же проблема. Move-Item : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом ___ cd d:\scripts\Send1\ $body = Get-ChildItem | ?{ ! $_.PSIsContainer } | % { $_.FullName } if($body) { send-mailmessage -to "User01 <a@p.com.ua>" -from "User02 <i@a.ua>" -Attachment $body -subject "Test mail" -SmtpServer m.a.ua -Body "test" } Start-Sleep -s 5 Get-ChildItem "d:\scripts\Send1\"|where { ! $_.PSIsContainer } |select -expand fullname | foreach-object {move-item $_ -destination "d:\scripts\Send1\old\"} |
Время: 21:30. |
Время: 21:30.
© OSzone.net 2001-