2010-10-22 14 views
10

Ich habe ein PowerShell-Skript geschrieben, das eine E-Mail erstellt, aber ich kann keine Datei anhängen. Die Datei existiert und PowerShell kann sie öffnen. Könnte mir jemand sagen, was ich falsch mache?So hängen Sie eine Datei an eine E-Mail mit PowerShell an

$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

auch, dass ich mit Powershell 2 – TheLukeMcCarthy

Antwort

3

Ich habe die oben durch Entfernen der Linie

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

und wechselnden

$message.Attachments.Add($attachment) 

zu

$message.Attachments.Add($file) 

zu arbeiten, während die Lösung von @Keith Hill zur Verfügung gestellt besser wäre, selbst mit viel Glut konnte ich es nicht zur Arbeit bringen.

12

Wenn Sie auf Powershell sind 2.0, verwenden Sie einfach die integrierten in Cmdlets 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 

Wenn Sie kopieren/einfügen dies für den zusätzlichen Platz nach dem Graviszeichen hinzugefügt aufpassen. PowerShell mag es nicht.

+0

Dank für, aber ich bekomme "Fehler, die Verbindung mit dem Remote-Server herstellen" Fehler beim Versuch, das zu verwenden, und der Server ist aktiv. – TheLukeMcCarthy

+0

Das könnte Authentifizierung, Firewall, etc. sein. Diesen Thread für weitere Hilfe - http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/a75533eb-131b-4ff3-a3b2-b6df87c25cc8/ (nach unten). –

+0

Egal, was ich mache, ich kann das oben genannte nicht zur Arbeit bekommen. Ich bekomme den folgenden Fehler. Send-MailMessage: Verbindung zum Remote-Server konnte nicht hergestellt werden In Zeile: 1 Zeichen: 17 + Send-MailMessage <<<< -von "[email protected]" ' + CategoryInfo: InvalidOperation: (System.Net. Mail.SmtpClient: SmtpClient) [Send-MailMessage], SmtpException + FullyQualifiedErrorId: SmtpException, Microsoft.PowerShell.Commands.Send MailMessage Auch ich versuche, dies von einem Client-Computer und nicht der Exchange-Server ausführen. – TheLukeMcCarthy

0

Sie können send-mailmessage oder system.net.mail.MailMessage verwenden, um es zu erreichen. Interessanterweise gibt es einen signifikanten Laufzeitunterschied zwischen den beiden Ansätzen. Sie können den Befehl measure verwenden, um die Ausführungszeit der Befehle zu beobachten.

0

Dieser arbeitete für mich powershell-

Variablen definieren mit:

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

Verwenden Sie die Variablen im Skript:

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