Как прикрепить файл к электронной почте с помощью PowerShell

Я написал сценарий 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 ответов


Если вы используете 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

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


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

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

и меняется

$message.Attachments.Add($attachment)

to

$message.Attachments.Add($file)

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


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


это сработало для меня с помощью 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)