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

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

Pavelnt 16-11-2011 11:24 1796182

Отправка почты через PowerShell
 
Добрый день!
Подскажите, есть вот такой скрипт:
Код:

$Server = "" # SMTP Сервер
$From = "" # Адрес отправителя
$To = "" # Получатель
$Subject = "Test" # Тема сообщения
$Body = "Test" # Тело сообщения
$ListFile = Get-ChildItem "C:\Attachments" # Вложения

$SmtpClient = New-Object System.Net.Mail.SmtpClient
$Message = New-Object System.Net.Mail.MailMessage
$SmtpClient.Host = $Server
$Message.From = $From
$Message.To.Add($To)
$Message.Subject = $Subject
$Message.Body = $Body
foreach ($File in $ListFile){
        $Attachment = New-Object System.Net.Mail.Attachments($File.Fullname)
    $Message.Attachments.Add($Attachment)
}
$SmtpClient.Send($Message)
Write-Host "Complete!"
$Message.Dispose()

Возможно ли сделать так, чтобы файлы для вложения брались из каталога Attachments, который расположен рядом с исполняемым скриптом PowerShell?
Возникают ситуации когда скрипт необходимо перенести, а поэтому указание абсолютного пути не всегда удобно. Т.е. что нужно запись в переменнтую $ListFile чтобы список вложений формировался из файлов, которые находятся в папке Attachments, которая в свою очередь лежит рядом со скриптом?

Kazun 16-11-2011 11:53 1796209

Проще использовать cmdlet - Send-MailMessage.Для определения папки из которой запускается скрипт,используйте переменную $MyInvocation:

$PathAtt = Join-Path (Split-Path $MyInvocation.MyCommand.Path) Attachments

Pavelnt 16-11-2011 13:30 1796279

Спасибо!
А подскажите, возможно ли отправлять письмо средствами скрипта с авторизаций и поддержкой SSL так чтобы логин и пароль можно было явным образом указывать в скрипте, а не вводить используя вызов:
Код:

$cred = Get-Credential
?

Kazun 16-11-2011 13:44 1796291

Для Send-MailMessage есть параметр -UseSsl,для .Net указать свойство - $SmtpClient.EnableSsl = $true.

Можно и явно задать.

$SmtpClient.Credentials= New-Object System.Net.NetworkCredential("UserName" , "Password")

Или если для командлета:
$pass = ConvertTo-SecureString "password" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("UserName" , $pass)

beowulf0208 16-08-2019 19:01 2884388

Здравствуйте. Можно ли отправлять не один, а сразу 2 или 3 файла в одном письме используя скрипт PowerShell (.ps1)? На одном сайте нашёл очень удобный скрипт, но он отправляет только по одному файлу.

Скрытый текст
#Адрес сервера SMTP для отправки
$serverSmtp = "smtp.yandex.ru"

#Порт сервера
$port = 587

#От кого
$From = "login@yandex.ru"

#Кому
$To = "myMail@mail.ru"

#Тема письма
$subject = "Письмо с вложением"

#Логин и пароль от ящики с которого отправляете login@yandex.ru
$user = "login"
$pass = "12345678"

#Путь до файла
$file = "C:\arhive.zip"

#Создаем два экземпляра класса
$att = New-object Net.Mail.Attachment($file)
$mes = New-Object System.Net.Mail.MailMessage

#Формируем данные для отправки
$mes.From = $from
$mes.To.Add($to)
$mes.Subject = $subject
$mes.IsBodyHTML = $true
$mes.Body = "<h1>Тестовое письмо</h1>"

#Добавляем файл
$mes.Attachments.Add($att)

#Создаем экземпляр класса подключения к SMTP серверу
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)

#Сервер использует SSL
$smtp.EnableSSL = $true

#Создаем экземпляр класса для авторизации на сервере яндекса
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);

#Отправляем письмо, освобождаем память
$smtp.Send($mes)
$att.Dispose()


Пробовал добавлять ещё одну строку $file = "C:\arhive.zip", пробовал писать $file2 = "C:\arhive.zip", но оба эти варианта не сработали.

Busla 17-08-2019 11:07 2884427

beowulf0208, чем не устраивает командлет Send-MailMessage?

beowulf0208 17-08-2019 12:05 2884436

Цитата:

Цитата Busla
чем не устраивает командлет Send-MailMessage? »

Нужен именно скрипт в виде отдельного файла, который можно будет скачать по ftp и запустить на удалённом ПК.

Подсказали на ответах mail. Нужно добавить 3 строки в скрипт и тогда можно будет отправлять 2 файла. Вот эти строки:

$att2 = New-object Net.Mail.Attachment($file2)
$mes.Attachments.Add($att2)
$file2 = "C:\arhive2.zip"


Время: 15:03.

Время: 15:03.
© OSzone.net 2001-