Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 通过comObject Outlook.Application使用多个附件_Email_Powershell - Fatal编程技术网

Email 通过comObject Outlook.Application使用多个附件

Email 通过comObject Outlook.Application使用多个附件,email,powershell,Email,Powershell,我有一个脚本进入SCSM,从IR获取相关文件,并将它们正确下载到用户的计算机上。 接下来,我需要脚本从客户端的outlook应用程序创建一封电子邮件,并在发送电子邮件之前将其显示在屏幕上 以下是脚本中实现此功能的部分: $GetFiles = Get-ChildItem "$ArchiveRootPath\$IRID\" $ol = New-Object -comObject Outlook.Application #| New-Object Net.Mail.MailMessage $m

我有一个脚本进入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来创建电子邮件本身

以下是您的参考资料。这确认了第一个参数(在您的情况下也是唯一的参数)需要是文件的完整路径

将[System.Net.Mail.Attachment].Net对象传递到COM接口没有意义

您的代码应该如下所示:

$GetFiles = Get-ChildItem "$ArchiveRootPath\$IRID\" 

$ol = New-Object -comObject Outlook.Application
$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.Name"
    $mail.Attachments.Add($GetFile.FullName)
}
这里是一个参考。这确认了第一个参数(在您的情况下也是唯一的参数)需要是文件的完整路径

将[System.Net.Mail.Attachment].Net对象传递到COM接口没有意义

您的代码应该如下所示:

$GetFiles = Get-ChildItem "$ArchiveRootPath\$IRID\" 

$ol = New-Object -comObject Outlook.Application
$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.Name"
    $mail.Attachments.Add($GetFile.FullName)
}


不确定您使用的是什么版本,但我发现的似乎需要四个参数。我也不知道为什么COM对象必须知道.Net对象是什么(System.Net.Mail.Attachment)。我在企业环境中使用PS2.0,这将是SCSM任务中使用的主脚本的一部分。至于在调用com对象时调用.net,我不确定。我试过很多不同的变体。。。注释掉$attachment行。。。但是在这种情况下,我没有收到任何错误,邮件也出现了,但是文件中缺少了附件(尽管PS正在使用这些附件)。有趣的是,虽然可能不是您要寻找的确切答案,但您是否尝试压缩目录的内容,只是简单地附加压缩文件?不确定您计划发送电子邮件的内容有多大,但认为值得一提。@bundyfx-Zip不是一个选项。它将被我们的内部邮件服务器、网关服务器或收件人服务器(收件人在我们组织外部)标记和阻止。如果我指定了一个文件名,那么它就可以正常工作,并且可以毫无问题地进行附加,例如:$Getfiles=“file path\filename”$mail.Attachments.add($Getfiles)很抱歉格式不正确。我正在尝试掌握诀窍,但显然失败了。不确定您使用的是什么版本,但我发现的似乎需要四个参数。我也不知道为什么COM对象必须知道.Net对象是什么(System.Net.Mail.Attachment)。我在企业环境中使用PS2.0,这将是SCSM任务中使用的主脚本的一部分。至于在调用com对象时调用.net,我不确定。我试过很多不同的变体。。。注释掉$attachment行。。。但是在这种情况下,我没有收到任何错误,邮件也出现了,但是文件中缺少了附件(尽管PS正在使用这些附件)。有趣的是,虽然可能不是您要寻找的确切答案,但您是否尝试压缩目录的内容,只是简单地附加压缩文件?不确定您计划发送电子邮件的内容有多大,但认为值得一提。@bundyfx-Zip不是一个选项。它将被我们的内部邮件服务器、网关服务器或收件人服务器(收件人在我们组织外部)标记和阻止。如果我指定了一个文件名,那么它就可以正常工作,并且可以毫无问题地进行附加,例如:$Getfiles=“file path\filename”$mail.Attachments.add($Getfiles)很抱歉格式不正确。我正在尝试掌握诀窍,但显然失败了。不确定您使用的是什么版本,但我发现的似乎需要四个参数。我也不知道为什么COM对象必须知道.Net对象是什么(System.Net.Mail.Attachment)。我在企业环境中使用PS2.0,这将是SCSM任务中使用的主脚本的一部分。至于在调用com对象时调用.net,我不确定。我试过很多不同的变体。。。注释掉$attachment行。。。但是在这种情况下,我没有收到任何错误,邮件也出现了,但是文件中缺少了附件(尽管PS正在使用这些附件)。有趣的是,虽然可能不是您要寻找的确切答案,但您是否尝试压缩目录的内容,只是简单地附加压缩文件?不确定您计划发送电子邮件的内容有多大,但认为值得一提。@bundyfx-Zip不是一个选项。它将被我们的内部邮件服务器、网关服务器或收件人服务器(收件人在我们组织外部)标记和阻止。如果我指定了一个文件名,那么它就可以正常工作,并且可以毫无问题地进行附加,例如:$Getfiles=“file path\filename”$mail.Attachments.add($Getfiles)很抱歉格式不正确。我正在努力掌握诀窍,显然失败了。非常感谢!在这一点上,即使我知道在com对象中传递.net是没有意义的,我也不知道还能尝试什么。我明天在办公室试试看!非常感谢你!在这一点上,即使我知道在com对象中传递.net是没有意义的,我也不知道还能尝试什么。我明天在办公室试试看!非常感谢你!在这一点上,即使我知道在com对象中传递.net是没有意义的,我也不知道还能尝试什么。我明天在办公室试试看!