Email 通过comObject Outlook.Application使用多个附件
我有一个脚本进入SCSM,从IR获取相关文件,并将它们正确下载到用户的计算机上。 接下来,我需要脚本从客户端的outlook应用程序创建一封电子邮件,并在发送电子邮件之前将其显示在屏幕上 以下是脚本中实现此功能的部分: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
$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是没有意义的,我也不知道还能尝试什么。我明天在办公室试试看!