J'ai écrit un script PowerShell qui créera un e-mail, 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 mal?
$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)
J'ai fait fonctionner ce qui précède en supprimant la ligne
$attachment = new-object System.Net.Mail.Attachment $file
et changer
$message.Attachments.Add($attachment)
à
$message.Attachments.Add($file)
Alors que la solution fournie par @Keith Hill serait meilleure, même avec beaucoup de lunettes, je ne pouvais pas la faire fonctionner.
Si vous utilisez PowerShell 2.0, utilisez simplement la cmdlet intégrée 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
Si vous copiez/collez ceci, faites attention à l'espace supplémentaire ajouté après le backtick. PowerShell n'aime pas ça.
Cela a fonctionné pour moi en utilisant PowerShell-
Définissez les 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 du 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)
J'ai rencontré un tel problème, (windows 10/PS 5.1) Mon SMTP n'est pas authentifié ou sécurisé ... Je dois terminer par cette ligne "MyAttacheObject.Dispose ()" .../et enfin ça marche:!
$smtp = new-object Net.Mail.SmtpClient($smtpserver)
$attach.Dispose()
voici mon code avec deux pièces jointes:
# 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()
Vous pouvez utiliser send-mailmessage ou system.net.mail.MailMessage pour y parvenir. Fait intéressant, il existe une différence de temps d'exécution significative entre les deux approches. Vous pouvez utiliser la commande-mesure pour observer le temps d'exécution des commandes.