Как прикрепить файл к письму с помощью 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)

person TheLukeMcCarthy    schedule 22.10.2010    source источник


Ответы (5)


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

C:\PS>Send-MailMessage -from "User01 <[email protected]>" `
                       -to "User02 <[email protected]>", `
                           "User03 <[email protected]>" `
                       -subject "Sending the Attachment" `
                       -body "Forgot to send the attachment. Sending now." `
                       -Attachment "data.csv" -smtpServer smtp.fabrikam.com

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

person Keith Hill    schedule 22.10.2010
comment
спасибо за это, но я получаю сообщение об ошибке «Невозможно подключиться к удаленному серверу» при попытке использовать это, и сервер работает. - person TheLukeMcCarthy; 25.10.2010
comment
Это может быть проверка подлинности, брандмауэр и т. д. Дополнительные сведения см. в этой теме — social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/ (вниз). - person Keith Hill; 26.10.2010
comment
Что бы я ни делал, я не могу заставить работать вышеперечисленное. Я получаю следующую ошибку. Send-MailMessage: невозможно подключиться к удаленному серверу В строке: 1 символ: 17 + Send-MailMessage ‹‹‹‹ -from [email protected]` + CategoryInfo: InvalidOperation: (System.Net.Mail.SmtpClient: SmtpClient) [Send-MailMessage], SmtpException + FullyQualifiedErrorId: SmtpException, Microsoft.PowerShell.Commands.Send MailMessage Также я пытаюсь запустить это с клиентского компьютера, а не с сервера обмена. - person TheLukeMcCarthy; 29.10.2010
comment
@TheLukeMcCarthy Проверьте возможность блокировки действий порта антивирусным сканером. - person JustinStolle; 05.08.2015

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

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

и изменение

$message.Attachments.Add($attachment)

to

$message.Attachments.Add($file)

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

person TheLukeMcCarthy    schedule 01.11.2010

Это сработало для меня, используя powershell-

Определить переменные:

$fromaddress = "[email protected]" 
$toaddress = "[email protected]" 
$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)
person P.D    schedule 01.03.2018

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

person Bill    schedule 05.11.2010

У меня возникла такая проблема (Windows 10 / PS 5.1) Мой SMTP не аутентифицирован или не защищен ... Я должен закончить этой строкой «MyAttacheObject.Dispose ()» ... / и, наконец, это работа :!

$smtp = new-object Net.Mail.SmtpClient($smtpserver) 
$attach.Dispose()

это мой код с двумя вложениями:

# Email configuration NO AUTH NO SECURE
$emailHost = "smtp.bot.com"
$emailUser = ""
$emailPass = ""
$emailFrom = "[email protected]"
$emailsTo=@("[email protected]","[email protected]")
$emailSubject = $title
$emailbody=$body
$attachment1 = @($PATh+$outFile) 
$attachment2 = @($PATh+$inFile) 
#End of parameters

$msg = New-Object System.Net.Mail.MailMessage
$msg.from = ($emailFrom)
    foreach ($d in $emailsTo) {    
    $msg.to.add($d)
    }
$msg.Subject = $emailSubject
$msg.Body = $emailbody
$msg.isBodyhtml = $true   

$att = new-object System.Net.Mail.Attachment($attachment1)
$msg.Attachments.add($att)
$att = new-object System.Net.Mail.Attachment($attachment2)
$msg.Attachments.add($att)
$smtp = New-Object System.Net.Mail.SmtpClient $emailHost
$smtp.Credentials = New-Object System.Net.NetworkCredential($emailUser, $emailPass);
  $smtp.send($msg)
  $att.Dispose()
person JMMDL    schedule 08.10.2019