2010-10-22 13 views
10

J'ai écrit un script PowerShell qui va créer un email, mais je n'arrive pas à joindre un fichier. Le fichier existe et PowerShell peut l'ouvrir. Quelqu'un pourrait-il me dire ce que je fais de mal?Comment joindre un fichier à un e-mail avec 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) 
+0

J'utilise aussi Powershell 2 – TheLukeMcCarthy

Répondre

3

J'ai obtenu ci-dessus pour travailler en supprimant la ligne

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

et le changement

$message.Attachments.Add($attachment) 

à

$message.Attachments.Add($file) 

Bien que la solution fournie par @Keith Colline serait mieux, même avec beaucoup de goggling je ne pouvais pas le faire fonctionner.

12

Si vous êtes sur PowerShell 2.0, il suffit d'utiliser l'applet de commande intégré Envoyer-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 

Si vous copiez/collez cette montre pour l'espace supplémentaire ajouté après la backtick. PowerShell ne l'aime pas.

+0

merci pour cela, mais je reçois "Impossible de se connecter au serveur distant" erreur en essayant d'utiliser cela, et le serveur est en hausse. – TheLukeMcCarthy

+0

Cela peut être l'authentification, le pare-feu, etc. Consultez ce fil d'information pour obtenir de l'aide supplémentaire - http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/a75533eb-131b-4ff3-a3b2-b6df87c25cc8/ (vers le bas). –

+0

Peu importe ce que je fais, je ne peux pas obtenir ce qui précède pour fonctionner. Je reçois l'erreur suivante. Send-MailMessage: Impossible de se connecter au serveur distant A la ligne: 1 caractère: 17 + Envoyer-MailMessage <<<< -depuis "[email protected]" ' + CategoryInfo: InvalidOperation: (System.Net. Mail.SmtpClient: SmtpClient) [Send-MailMessage], SmtpException + FullyQualifiedErrorId: SmtpException, Microsoft.PowerShell.Commands.Send MailMessage Aussi j'essaye de courir ceci d'une machine de client et pas du serveur d'échange. – TheLukeMcCarthy

0

Vous pouvez utiliser send-mailmessage ou system.net.mail.MailMessage pour l'accomplir. Fait intéressant, il existe une différence de temps d'exécution significative entre les deux approches. Vous pouvez utiliser measure-command pour observer le temps d'exécution des commandes.

0

Cela a fonctionné pour moi en utilisant powershell-

: Définition de variables

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

Utilisez les variables dans le script:

$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)