2010-10-22 34 views
10

He escrito un script de PowerShell que creará un correo electrónico, sin embargo, parece que no puedo adjuntar un archivo. El archivo existe y PowerShell puede abrirlo, ¿alguien podría decirme qué estoy haciendo mal?Cómo adjuntar un archivo a un correo electrónico con 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

También estoy usando Powershell 2 – TheLukeMcCarthy

Respuesta

3

que tiene lo anterior para trabajar por la eliminación de la línea

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

y cambiando

$message.Attachments.Add($attachment) 

a

$message.Attachments.Add($file) 

Mientras que la solución aportada por la colina @Keith sería mejor, incluso con muchas goggles no pude hacer que funcionara.

12

Si usted está en PowerShell 2.0, sólo tiene que utilizar la opción Enviar-MailMessage incorporada cmdlet:

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 copia/pega este cuidado con el espacio extra añadido después de la tilde. PowerShell no le gusta.

+0

gracias por eso, pero obtengo el error "No se puede conectar con el servidor remoto" cuando trato de usarlo, y el servidor está activo. – TheLukeMcCarthy

+0

Eso podría ser autenticación, firewall, etc. Consulte este hilo para obtener ayuda adicional - http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/a75533eb-131b-4ff3-a3b2-b6df87c25cc8/ (hacia el fondo). –

+0

No importa lo que haga, no puedo hacer que lo anterior funcione. Me sale el siguiente error. Send-MailMessage: no se puede conectar al servidor remoto En línea: 1 char: 17 + Send-MailMessage <<<< -from "[email protected]" ' + CategoryInfo: InvalidOperation: (System.Net. Mail.SmtpClient: SmtpClient) [Send-MailMessage], SmtpException + FullyQualifiedErrorId: SmtpException, Microsoft.PowerShell.Commands.Send MailMessage También estoy tratando de ejecutar esto desde una máquina cliente y no desde el servidor de intercambio. – TheLukeMcCarthy

0

Puede usar send-mailmessage o system.net.mail.MailMessage para lograrlo. Curiosamente, hay una diferencia de tiempo de ejecución significativa entre los dos enfoques. Puede usar measure-command para observar el tiempo de ejecución de los comandos.

0

Esto funcionó para mí usando powershell-

definir variables:

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

utilizar las variables de la secuencia de comandos:

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