Войти

Показать полную графическую версию : [решено] Отправка почты через PowerShell


Pavelnt
16-11-2011, 11:24
Добрый день!
Подскажите, есть вот такой скрипт:

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

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

Pavelnt
16-11-2011, 13:30
Спасибо!
А подскажите, возможно ли отправлять письмо средствами скрипта с авторизаций и поддержкой SSL так чтобы логин и пароль можно было явным образом указывать в скрипте, а не вводить используя вызов:

$cred = Get-Credential

?

Kazun
16-11-2011, 13:44
Для 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
Здравствуйте. Можно ли отправлять не один, а сразу 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
beowulf0208, чем не устраивает командлет Send-MailMessage?

beowulf0208
17-08-2019, 12:05
чем не устраивает командлет Send-MailMessage? »

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

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

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




© OSzone.net 2001-2012