【发布时间】:2015-06-11 10:08:30
【问题描述】:
我有一个进入 SCSM 的脚本,从 IR 获取相关文件并将它们正确下载到用户的计算机上。 接下来,我需要脚本从客户的 Outlook 应用程序创建一封电子邮件,并在发送电子邮件之前将其显示在他们的屏幕上..
这是执行此操作的脚本部分:
$GetFiles = Get-ChildItem "$ArchiveRootPath\$IRID\"
$ol = New-Object -comObject Outlook.Application #| New-Object Net.Mail.MailMessage
$mail = $ol.CreateItem(0)
$mail.To = "johndoe@contoso.com"
$mail.Subject = "This is a test [$IRID]"
Foreach($GetFile in $GetFiles)
{
Write-Host “Attaching File :- ” $GetFile
$attachment = New-Object System.Net.Mail.Attachment –ArgumentList C:\Temp\SCSM_Archive\$IRID\$GetFile
$mail.Attachments.Add($attachment)
}
$inspector = $mail.GetInspector
$inspector.Display()
但是,当我运行脚本时,我得到了这个错误:
Attaching File :- email.eml
Exception calling "Add" with "1" argument(s): "Value does not fall within the expected range."
At C:\Temp\SSWireless Script.ps1:99 char:2
+ $mail.Attachments.Add($attachment)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
从下载文件的脚本的前一部分检查所有变量。 PS 可以看到文件,但不能将它们附加到电子邮件中。 我不想使用发送消息功能,因为我们将转移到跨域电子邮件帐户,并且宁愿使用 Outlook 来创建电子邮件本身。
【问题讨论】:
-
不确定您使用的是什么版本,但我发现的
Attachments.Add()似乎需要四个参数。我也不知道为什么 COM 对象一定会知道 .Net 对象是什么(System.Net.Mail.Attachment)。 -
我在企业环境中使用 PS2.0,这将是 SCSM 任务中使用的主脚本的一部分。至于在调用 com 对象时调用 .net,我不确定。我尝试了很多不同的变体...注释掉 $attachment 行...但是在这种情况下,我没有收到错误并且出现了电子邮件,但是文件中缺少附件(尽管它们是PS正在使用中)。
-
有趣,虽然可能不是您正在寻找的确切答案,但您是否尝试过压缩目录的内容并只是简单地附加 zip?不完全确定您计划通过电子邮件发送的内容有多大,但认为值得一提。
-
@bundyfx Zip 不是一个选项。它将被我们的内部邮件服务器、网关服务器或收件人服务器(收件人在我们组织的外部)标记和阻止。如果我指定一个文件名,那么它就可以工作,并且可以毫无问题地附加,即: $Getfiles = "File path\filename" $mail.Attachments.add($Getfiles)
-
抱歉格式错误。我正在尝试掌握它,但显然失败了。
标签: email powershell