【问题标题】:Cannot send multiple attachments from different directories using Send-MailMessage无法使用 Send-MailMessage 从不同目录发送多个附件
【发布时间】:2019-01-30 22:43:11
【问题描述】:

我无法使用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. 将每个文件的 FullName 添加到其自己的变量中,并使 $attachments 成为这些变量的数组
  2. 使用Get-ChildItem -Recurse | Where-Object {($_.Name -eq "test.txt") -or ($_.Name -eq "log.txt")} | Send-MailMessage

除非两个文件在同一个目录中,否则这些都不起作用。谁能帮助解释为什么会这样或告诉我我哪里出错了?我知道有很多解决方法,但我想解决这个特定问题。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我刚刚使用您的代码进行了测试,并在我的 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 帐户。

    【讨论】:

    • 刚刚用我测试过的两个系统上的输出进行了编辑
    • 您能否分享您的代码,以便我可以像您一样尝试?当然经过消毒,我会输入我自己的信用。
    • 一切都和你的一样,除了我使用自己的凭据和 Office 365 用于 SMTP 的凭据和服务器。作为收件人参数中的收件人,我只添加了我的电子邮件,因此参数中没有“收件人”,只有一个电子邮件地址,字符串中没有其他任何内容
    • 啊,我想念你在答案中这么说。嗯..我会做更多的测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多