2017-02-10 20 views
2

Я хочу добавить несколько приложений для отправки по электронной почте. С одной не проблема, но если вы пытаетесь добавить два или еще что-то пойдет не такPowershell - Outlook - добавьте несколько вложений в электронную почту

Мой код

$file_patch=Get-ChildItem 'C:\OUTLOOK' | Sort {$_.LastWriteTime} | select -last 1 | % { $_.FullName } 
$name=Select-String -Path $file_patch -pattern name 
$email=Select-String -Path $file_patch -pattern email 
$subject=Select-String -Path $file_patch -pattern subject 
$attachment=Select-String -Path $file_patch -pattern attachment 
$Signature = Get-Content ($env:USERPROFILE + "\AppData\Roaming\Microsoft\Signatures\*.htm") 
$rname = $name -replace ".*:" 
$remail = $email -replace ".*:" 
$rsubject = $subject -replace ".*:" 
$rattachment = $attachment -replace ".*attachment:" 
$sname = $rname -split ";" 
$semail = $remail -split ";" 
$ssubject = $rsubject -split ";" 
$sattachment = $rattachment -split ";" 
$body=Get-Content C:\OUTLOOK\BODY\$sname.txt 
$Signature = Get-Content ($env:USERPROFILE + "\AppData\Roaming\Microsoft\Signatures\*.htm") 
$sRecipientAddr = $semail 
$sMsgSubject = $ssubject 
$oOutlook = New-Object -ComObject Outlook.Application 
$oMapiNs = $oOutlook.GetNameSpace("MAPI") 
$oMailMsg = $oOutlook.CreateItem(0) 
$oMailMsg.GetInspector.Activate() 
$sSignature = $oMailMsg.HTMLBody 
[Void]$oMailMsg.Recipients.Add($sRecipientAddr) 
$oMailMsg.Attachments.Add($sattachment) 
$oMailMsg.Subject = $sMsgSubject 
$oMailMsg.HTMLBody = $body + $sSignature 

Мой файл

Название: Перспективы
электронная почта: электронная почта @ иначе. pl; [email protected]; [email protected]
Тема: Вы прекрасны
приложение: «C: \ outlook \ attachment \ sell.txt»; «C: \ outlook \ attachment \ out.txt "

Ошибка:

PS > Value does not fall within the expected range. 
+ $oMailMsg.Attachments.Add($sattachment) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo : OperationStopped: (:) [], A 
+ FullyQualifiedErrorId : System.ArgumentException 

Что может быть неправильно

ответ

2

Вы пытаетесь передать массив непосредственно в .attachments.add(). В методе page here используется метод Add.

Поэтому, я думаю, что если добавить вложения в несколько иначе, вы должны добиться успеха:

... 
$sSignature = $oMailMsg.HTMLBody 
[Void]$oMailMsg.Recipients.Add($sRecipientAddr) 
$sattachment | ForEach-Object { $oMailMsg.Attachments.Add($_) } 
$oMailMsg.Subject = $sMsgSubject 
$oMailMsg.HTMLBody = $body + $sSignature 

Предполагая $sattachment = $rattachment -split ";" на самом деле возвращает массив строк, вы можете цикл над ним с помощью ForEach-Object командлета. Затем будет вызываться метод .Add() для каждого элемента массива, который представлен блоком $_.