如果outlook已在运行,则使用powershell在outlook中发送电子邮件而不锁定
我有以下计划:如果outlook已在运行,则使用powershell在outlook中发送电子邮件而不锁定,powershell,outlook,Powershell,Outlook,我有以下计划: Function Email{ param ($to, $Subject, $Body, $Attachment) if($process=(get-process 'outlook')) { kill($process) Stop-Process $process -Force #$namespace = $outlook.GetNameSpace("MAPI") #$namespace.Logon("ou
Function Email{
param ($to, $Subject, $Body, $Attachment)
if($process=(get-process 'outlook'))
{
kill($process)
Stop-Process $process -Force
#$namespace = $outlook.GetNameSpace("MAPI")
#$namespace.Logon("outlook")
}
$Outlook = New-Object -Com Outlook.Application
$session = $outlook.Session
$session.Logon("Outlook")
$Mail = $Outlook.CreateItem(0)
foreach ($person in $to){
$Mail.Recipients.add($person)
}
$Mail.Subject = $Subject
$Mail.Body = $Body
$Mail.Attachments.Add($Attachment)
$Mail.Send()
}
在ISE和批量测试时,其功能与预期一致。但是,在另一个powershell脚本中使用时,它会随机导致脚本挂起,并且由于多个实例的错误,我无法手动打开outlook
我如何重新编写它以正确地解释outlook正在运行的实例(或者至少不会导致使用它的脚本挂起)
更新:我也尝试过,因为:
Function Email{
param ($to, $Subject, $Body, $Attachment)
$Creds = Import-CliXml c:\localdata\cred.clixml
$username= myemail
Send-MailMessage -To $to -subject $Subject -body $Body -Attachment $Attachment -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $creds
}
我无法通过“无法连接到远程服务器”错误
运行telnet smtp.office365.com 587或telnet smtp.office365.com 25似乎不会返回任何内容 要诊断并正确处理错误,可以使用try..catch语句,这样脚本就不会在出现错误时失败并停止。使用自动
$error
变量并输出到catch语句中的文本文件以获取错误。根据我的经验,使用MS Office COM对象可能非常不可靠。您是否考虑过使用其他方法发送电子邮件,如发送邮件消息
?@robliv请查看更新您是否在公司网络上工作?内政部?您的计算机上是否安装了防病毒软件?@vonPryz位于受McAfee保护的公司网络上。那么McAfee可能会阻止未经授权的SMTP连接。这是一种常见的配置,可防止僵尸网络使用您的工作站发送垃圾邮件或更糟的信息。此时,请与您的IT部门联系并与他们合作以获得解决方案。要诊断并正确处理错误,您可以使用try..catch语句,这样脚本就不会在出现错误时失败并停止。使用自动$error
变量并输出到catch语句中的文本文件以获取错误。根据我的经验,使用MS Office COM对象可能非常不可靠。您是否考虑过使用其他方法发送电子邮件,如发送邮件消息
?@robliv请查看更新您是否在公司网络上工作?内政部?您的计算机上是否安装了防病毒软件?@vonPryz位于受McAfee保护的公司网络上。那么McAfee可能会阻止未经授权的SMTP连接。这是一种常见的配置,可防止僵尸网络使用您的工作站发送垃圾邮件或更糟的信息。此时,请联系您的IT部门并与他们合作以获得解决方案。