How to attach a file to an email with PowerShell

前端 未结 5 620
广开言路
广开言路 2021-01-17 11:23

I have written a PowerShell script that will create an email, however I can\'t seem to attach a file. The file does exist and PowerShell can open it, Could anyone tell me wh

相关标签:
5条回答
  • 2021-01-17 11:51

    This worked for me using powershell-

    Define Variables:

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

    Use the variables in the 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)
    
    0 讨论(0)
  • 2021-01-17 11:52

    I have experienced such problem, (windows 10 / PS 5.1) My SMTP is not authentified or secure ... I have to finish by this line "MyAttacheObject.Dispose()" ... / and finally that's work :!

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

    this is my code with two attachments :

    # Email configuration NO AUTH NO SECURE
    $emailHost = "smtp.bot.com"
    $emailUser = ""
    $emailPass = ""
    $emailFrom = "myemail@bot.com"
    $emailsTo=@("toyoumylove@bot.com","toyoumybad@bot.com")
    $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()
    
    0 讨论(0)
  • 2021-01-17 11:59

    I got the above to work by removing the line

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

    and changing

    $message.Attachments.Add($attachment)
    

    to

    $message.Attachments.Add($file)
    

    While the solution provided by @Keith Hill would be better, even with a lot of goggling I couldn't get it to work.

    0 讨论(0)
  • 2021-01-17 12:05

    If you are on PowerShell 2.0, just use the built-in cmdlet Send-MailMessage:

    C:\PS>Send-MailMessage -from "User01 <user01@example.com>" `
                           -to "User02 <user02@example.com>", `
                               "User03 <user03@example.com>" `
                           -subject "Sending the Attachment" `
                           -body "Forgot to send the attachment. Sending now." `
                           -Attachment "data.csv" -smtpServer smtp.fabrikam.com
    

    If you copy/paste this watch out for the extra space added after the backtick. PowerShell doesn't like it.

    0 讨论(0)
  • You can use send-mailmessage or system.net.mail.MailMessage to accomplish it. Interestingly, there is a significant execution time difference between the two approaches. You can use measure-command to observe the execution time of the commands.

    0 讨论(0)
提交回复
热议问题