无法使用Send-MailMessage从不同目录发送多个附件

时间:2019-01-30 22:43:12

标签: powershell

我不能使用Send-MailMessage cmdlet发送多个附件,如果这些文件位于单独的目录中。我可以发送一个文件,我可以发送另一个文件,如果两个文件都在同一目录中,我可以发送两个文件,但如果它们在不同目录中,则不能发送。

文件/文件夹如下:

C:\Scripts\Folder\test.txt
C:\Scripts\Folder\Logs\log.txt

我通过创建如下数组来将这些文件指定为附件:

$attachments = @("C:\Scripts\Folder\test.txt","C:\Scripts\Folder\Logs\log.txt")

我正在运行PowerShell 5.1,并且已经在Windows Server 2012 R2和Windows 10 v1803上对此进行了测试。

Windows Server 2012 R2上的

$ PSVersionTable:

Name                           Value
----                           -----
PSVersion                      5.1.14409.1018
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1018
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Windows 10 1803上的

$ PSVersionTable:

Name                           Value
----                           -----
PSVersion                      5.1.17134.407
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17134.407
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

以下是发送消息的完整脚本:

# Credentials
$username = "user@domain.com"
$password = ConvertTo-SecureString -String "password" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username,$password

# Attachments
$attachments = @("C:\Scripts\Folder\test.txt","C:\Scripts\Folder\Logs\log.txt")

Send-MailMessage -To "Recipient <recipient@domain.com>" -Subject "Subject Line" -Body "Body text" -SmtpServer smtp.domain.com -Attachments $attachments -Credential $cred -From "Sender <user@domain.com>" -Port 587 -Priority High -UseSsl

没有产生错误消息,并且消息与第一个附件一起发送和传递。如果我从数组中删除第一个文件,则会发送第二个文件(位于较低目录中的文件)。如果我将第二个文件移到与第一个文件相同的目录中,则两个文件都可以发送。我已经在上下搜索了为什么会发生这种情况的答案,但是我找不到关于源于附件的多个目录的答案。在help for Send-MailMessage中,也没有任何关于多个目录的内容。

我也尝试过以其他方式指定附件文件。我尝试过:

  1. 将每个文件的全名添加到其自己的变量中,并使$attachments成为这些变量的数组
  2. 使用Get-ChildItem -Recurse | Where-Object {($_.Name -eq "test.txt") -or ($_.Name -eq "log.txt")} | Send-MailMessage

除非两个文件都位于同一目录中,否则这些操作均无效。谁能帮忙解释为什么会这样,或者告诉我我哪里出问题了?我知道有很多解决方法,但我想解决这个特定问题。

1 个答案:

答案 0 :(得分:0)

我刚刚使用您的代码进行了测试,并在Windows 10计算机上重新创建了相同的文件夹/文件结构,一切正常。 我收到了电子邮件,并且两个附件都存在。

您的$PSVersionTable说您的PowerShell PSVersion是什么?
我的是这样的:

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
PSVersion                      5.1.17763.134                                                                                                                                                                                                                     
PSEdition                      Desktop                                                                                                                                                                                                                           
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                                                           
BuildVersion                   10.0.17763.134                                                                                                                                                                                                                    
CLRVersion                     4.0.30319.42000                                                                                                                                                                                                                   
WSManStackVersion              3.0                                                                                                                                                                                                                               
PSRemotingProtocolVersion      2.3                                                                                                                                                                                                                               
SerializationVersion           1.1.0.1        

这正在运行Windows 10 build 1809 为了进行测试,我使用了通过smtp.office365.com发送的Office 365帐户。