【问题标题】:How to attach a file to an email with PowerShell如何使用 PowerShell 将文件附加到电子邮件
【发布时间】:2011-04-29 04:17:33
【问题描述】:

我编写了一个 PowerShell 脚本来创建电子邮件,但我似乎无法附加文件。该文件确实存在并且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)

【问题讨论】:

    标签: email powershell attachment powershell-2.0


    【解决方案1】:

    如果您使用的是 PowerShell 2.0,只需使用内置 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
    

    如果您复制/粘贴此内容,请注意反引号后添加的额外空间。 PowerShell 不喜欢它。

    【讨论】:

    • 谢谢你,但我在尝试使用它时收到“无法连接到远程服务器”错误,并且服务器已启动。
    • 这可能是身份验证、防火墙等。查看此线程以获得更多帮助 - social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/…(朝向底部)。
    • 无论我做什么,我都无法使上述工作。我收到以下错误。 Send-MailMessage : 无法连接到远程服务器在 line:1 char:17 + Send-MailMessage
    • @TheLukeMcCarthy 检查病毒扫描程序阻止端口操作的可能性。
    【解决方案2】:

    我通过删除该行来完成上述工作

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

    改变

    $message.Attachments.Add($attachment)
    

    $message.Attachments.Add($file)
    

    虽然@Keith Hill 提供的解决方案会更好,但即使我费了很多力气也无法让它发挥作用。

    【讨论】:

      【解决方案3】:

      这对我使用 powershell 有用-

      定义变量:

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

      使用脚本中的变量:

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

      【讨论】:

        【解决方案4】:

        您可以使用 send-mailmessage 或 system.net.mail.MailMessage 来完成它。有趣的是,这两种方法之间存在显着的执行时间差异。您可以使用 measure-command 来观察命令的执行时间。

        【讨论】:

          【解决方案5】:

          我遇到过这样的问题,(windows 10 / PS 5.1) 我的 SMTP 未经过身份验证或安全... 我必须完成这一行“MyAttacheObject.Dispose()” ... / 终于成功了:!

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

          这是我的代码,有两个附件:

          # 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()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-07
            • 2020-01-14
            • 1970-01-01
            • 2014-06-25
            • 2010-12-07
            • 2017-08-21
            • 2012-12-14
            相关资源
            最近更新 更多