我在项目中受到限制,必须使用PowerShell从Outlook生成和发送电子邮件。
param([string]$address, [string]$subject);
$Outlook = New-Object -ComObject Outlook.Application;
$Mail = $Outlook.CreateItemFromTemplate("D:\Users\mark\test.oft");
$Mail.To = "$address";
$Mail.Subject = "$subject";
$Mail.Send();
我使用的是经常使用的模板文件,因为我必须包含公司徽标嵌入图片。
但是我的问题是我需要更改电子邮件的某些部分,但保留嵌入式图形和格式。
在PowerShell中是否有传递(例如)参考ID参数的方法 - 并在OFT文件的正文中替换,#RefID#用"参考ID"例如:
param([string]$address, [string]$subject, [string]$RefID);
$Outlook = New-Object -ComObject Outlook.Application;
$Mail = $Outlook.CreateItemFromTemplate("D:\Users\mark\test.oft");
****
$Mail.Body = $Mail.Body.Replace("#RefID#", $RefID)
****
$Mail.To = "$address";
$Mail.Subject = "$subject";
$Mail.Send();
上面的.Replace似乎删除了格式,并用" CID代替徽标:...."
应该是什么样的:
使用替换后的样子:
感谢您的帮助,
标记
答案 0 :(得分:3)
我不太清楚我明白你要做什么。是否要使用变量#RefID#
的值替换邮件正文中的文字字符串$RefID
?如果是这样,可以这样做,但你需要在正确的地方(邮件正文)进行:
$Mail.Body = $Mail.Body.Replace("#RefID#", $RefID)
如果是HTML电子邮件,您可能需要修改HTMLBody
属性而不是Body
属性:
$Mail.HTMLBody = $Mail.HTMLBody.Replace("#RefID#", $RefID)
答案 1 :(得分:1)
您可以尝试几种选择。它们都应该用来替换文件中的文本。
1)
$file = "D:\users\mark\test.oft"
(Get-Content $file).Replace("#RefID","$RefID") | Set-Content $file
2)
(Get-Content $file) |
Foreach-Object {$_ -replace "#RefID","$RefID"} |
Out-File $file