【发布时间】:2019-07-06 17:39:47
【问题描述】:
作为入职流程的一部分,我们会将用户信用发送给招聘经理。我有一个保存在 Outlook 中的 DRAFT 模板并运行一个 PS 脚本,该脚本使用 Outlook 模板并将关键字替换为凭据信息(用户名、密码等)。它多年来一直运行良好,现在,MARCOM 想要对其进行修饰,并希望我们将内嵌图像添加到新员工电子邮件中。因此,我将图像添加到模板中,但是当我现在运行我的 PS 脚本时,新创建的电子邮件中没有图像。只有一个红色的“X”,Outlook 报告该图像无法显示。
我的一些关键要求是:
- 据我所知,我无法使用 SMTP 发送电子邮件(我必须使用 Outlook),因为必须延迟发送新创建的电子邮件(通过 DeferredDeliveryTime强>)。如果我可以使用 SMTP 发送,我可能会使用 之类的东西,但我不能使用 SMTP。我尝试将图像附加到 Outlook 中的 DRAFT 电子邮件,并使用 cid: 方法调用附加的文件名,但无法使用。
- 我们包含密码的拼音(每封电子邮件唯一),因此邮件合并也不起作用
- 图片都有超链接(到各种网站/服务)
我尝试了很多方法来解决这个问题,包括将 DRAFT 电子邮件保存为 HTML 并使用 Get-Content -Raw 读取 HTML 代码等,但没有奏效
我尝试使用 Mozilla Thunderbird(此处引用,powershell email with html picture showing red x)来获取图像的 Base64,但这也不起作用。
我的 PS 代码的一般基础知识(因为它与与 Outlook 的交互有关):
If ($arrNewHireCSVobjects.Count -ge 1)
{
[string]$strTemplateSubjectToUse = 'Account Information - xyz'
$oDraftsFolderIndex = 16
$objOutlook = New-Object -comObject Outlook.Application
$oNameSpace = $objOutlook.GetNameSpace("MAPI")
$oDraftsFolder = $oNameSpace.GetDefaultFolder($oDraftsFolderIndex)
$oTemplateToUse = $oDraftsFolder.Items | Where-Object {$_.Subject -eq $strTemplateSubjectToUse}
$arrNewHireCSVobjects | ForEach-Object {
$strTemp = $_."Manager ID"
$ManagerUPN = ($arrManagerInfo | Where-Object {$_.employeeID -eq $strTemp}).userPrincipalName
$NewOutlookEmail = $objOutlook.CreateItem(0)
$NewOutlookEmail.SentonBehalfofName = "IT.Service.Desk@domain.com"
$NewOutlookEmail.Recipients.Add($_."Current email address") | Out-Null
##
[string]$strPhoneticPassword = ""
For ($i = 0; $i -le $_."Temp password".Length; $i++) {
[string]$decimal = [byte][char]($_."Temp password"[$i])
If ($i -eq 0)
{
$strPhoneticPassword = $PhoneticTable[$decimal]
}
ElseIf ($i -eq $_."Temp password".Length)
{
$strPhoneticPassword = $strPhoneticPassword
}
Else
{
$strPhoneticPassword = $strPhoneticPassword + " / " + $PhoneticTable[$decimal]
}
}
$strPhoneticPassword = ($strPhoneticPassword.Trim()).Replace(' ',' ')
##
$NewOutlookEmail.Subject = $strTemplateSubjectToUse -replace 'xyz', ($_."First".Trim() + " " + $_."Last".Trim())
$NewOutlookEmail.HTMLBody = $NewOutlookEmail.HTMLBody -replace "TEMPnewhirename", ($_."First".Trim() + " " + $_."Last".Trim())
$NewOutlookEmail.HTMLBody = $NewOutlookEmail.HTMLBody -replace "TEMPusername", $_.Username
$NewOutlookEmail.HTMLBody = $NewOutlookEmail.HTMLBody -replace "TEMPemailaddress", $_."Email Address"
$NewOutlookEmail.HTMLBody = $NewOutlookEmail.HTMLBody -replace "TEMPtemppassword", $_."Temp password"
$NewOutlookEmail.HTMLBody = $NewOutlookEmail.HTMLBody -replace "TEMPphoneticpassword", $strPhoneticPassword
$NewOutlookEmail.DeferredDeliveryTime = (Date).AddHours(4)
$NewOutlookEmail.Send()
}
}
员工信息是从 CSV 导入的,模板中的图像是标准的内嵌图像(链接除外)。拼音密码是一个单独的功能。他们想要这个模板中的十几个内联图像,并且它们在 DRAFT 电子邮件中,但它们都没有显示在发送的最终电子邮件中(但超链接仍然适用于图像)。
鉴于我必须使用 Outlook 客户端而不是使用类似 Send-MailMessage 的要求,PS 可以发送作为现有 DRAFT 电子邮件一部分的内嵌图像在 Outlook(2013 或 2016)中成功(并在发送前修改了 DRAFT 模板以替换特定变量),其中包括签名示例/模板?如果是这样,我的 PS 代码中缺少什么可以让内联图像正确显示?
提前致谢!!
UCG
【问题讨论】:
标签: html powershell outlook