Как прикрепить файл к письму с помощью PowerShell - PullRequest
12 голосов
/ 22 октября 2010

Я написал сценарий PowerShell, который будет создавать электронную почту, однако я не могу прикрепить файл.Файл существует, и PowerShell может открыть его. Может кто-нибудь сказать мне, что я делаю неправильно?

$ol = New-Object -comObject Outlook.Application 
$message = $ol.CreateItem(0)
$message.Recipients.Add("Deployment")  
$message.Subject = "Website deployment"  
$message.Body = "See attached file for the updates made to the website`r`n`r`nWarm Regards`r`nLuke"

# Attach a file this doesn't work
$file = "K:\Deploy-log.csv"
$attachment = new-object System.Net.Mail.Attachment $file
$message.Attachments.Add($attachment)

Ответы [ 4 ]

13 голосов
/ 22 октября 2010

Если вы используете PowerShell 2.0, просто используйте встроенный командлет Send-MailMessage:

C:\PS>Send-MailMessage -from "User01 <user01@example.com>" `
                       -to "User02 <user02@example.com>", `
                           "User03 <user03@example.com>" `
                       -subject "Sending the Attachment" `
                       -body "Forgot to send the attachment. Sending now." `
                       -Attachment "data.csv" -smtpServer smtp.fabrikam.com

Если вы копируете / вставляете это, следите за дополнительным пространством, добавленным после обратной галочки.PowerShell это не нравится.

5 голосов
/ 01 ноября 2010

Я получил вышеупомянутое для работы, удалив строку

$attachment = new-object System.Net.Mail.Attachment $file

и меняется

$message.Attachments.Add($attachment)

до

$message.Attachments.Add($file)

Хотя решение, предоставленное @Keith Hill, было бы лучше, даже при большом количестве очков я не мог заставить его работать.

2 голосов
/ 01 марта 2018

Это сработало для меня с помощью powershell-

Определение переменных:

$fromaddress = "donotreply@pd.com" 
$toaddress = "test@pd.com" 
$Subject = "Test message" 
$body = "Please find attached - test"
$attachment = "C:\temp\test.csv" 
$smtpserver = "mail.pd.com" 

Использование переменных в сценарии:

$message = new-object System.Net.Mail.MailMessage 
$message.From = $fromaddress 
$message.To.Add($toaddress)
$message.IsBodyHtml = $True 
$message.Subject = $Subject 
$attach = new-object Net.Mail.Attachment($attachment) 
$message.Attachments.Add($attach) 
$message.body = $body 
$smtp = new-object Net.Mail.SmtpClient($smtpserver) 
$smtp.Send($message)
0 голосов
/ 05 ноября 2010

Вы можете использовать send-mailmessage или system.net.mail.MailMessage, чтобы выполнить это. Интересно, что между этими двумя подходами существует значительная разница во времени выполнения. Вы можете использовать команду measure для наблюдения за временем выполнения команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...