PowerShell - [решено] Отправка почты через PowerShell

Ответить
Аватара пользователя
Pavelnt

PowerShell - [решено] Отправка почты через PowerShell

Сообщение Pavelnt »

Добрый день!

Подскажите, есть вот такой скрипт:



Код:

Код: Выделить всё

$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

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение Kazun »

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



$PathAtt = Join-Path (Split-Path $MyInvocation.MyCommand.Path) Attachments
Аватара пользователя
Pavelnt

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение Pavelnt »

Спасибо!

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



Код:

Код: Выделить всё

$cred = Get-Credential

?
Аватара пользователя
Kazun

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение Kazun »

Для 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

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение beowulf0208 »

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





Скрытый текст

[spoiler]#Адрес сервера SMTP для отправки

$serverSmtp = "smtp.yandex.ru"



#Порт сервера

$port = 587



#От кого

$From = "login@yandex.ru"



#Кому

$To = "myMail@mail.ru"



#Тема письма

$subject = "Письмо с вложением"



#Логин и пароль от ящики с которого отправляете [url=mailto:login@yandex.ru]login@yandex.ru[/url]

$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 = "Тестовое письмо"



#Добавляем файл

$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()[/spoiler]






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

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение Busla »

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

Re: PowerShell - [решено] Отправка почты через PowerShell

Сообщение beowulf0208 »

Цитата Busla:



чем не устраивает командлет Send-MailMessage?
PowerShell - [решено] Отправка почты через PowerShell




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



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



$att2 = New-object Net.Mail.Attachment($file2)

$mes.Attachments.Add($att2)

$file2 = "C:\arhive2.zip"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»