我正在编写一个PowerShell脚本以检查多个PC中是否有特定文件,并在找到电子邮件时发送。它有效,但是电子邮件需要很长时间才能到达(大约两分半秒钟)。我尝试过仅运行send-mablemessage命令并获得相同的结果,因此它并不是脚本放慢脚本的不同部分。而且,这并不是所有时间都在紧缩 - 命令立即成功。Outlook在这座建筑物中发送并接收其他电子邮件,并且已经检查了它正在使用的SMTP服务器并使用了同一邮件。我搜索了其他遇到此问题的人,但仅找到了发送时间表或根本不起作用的示例。
这是我一直在使用的命令(to/from/trom/smtp服务器替换为占位符):
Send-MailMessage -To "Example Person <ex@example.com>" -From "Example Person <ex@example.com>" -Subject "Test mail" -SmtpServer "XXXXX.XXXXXXXXX.com" -dno onFailure, onSuccess, Delay
我应该注意,当我运行此操作时,-dno delay不会通知我电子邮件已被延迟(并且不是问题本身的源头,因为当我取出DNO参数时,我会得到相同的结果)。相反,两分钟后,我获得了成功通知。
,因为这是我想提供答案的第一个Google结果 - 因为这篇文章意味着PowerShell发送后不会立即关闭TCP连接,这可以使SMTP会话打开或其他东西。
但是,如果您结束PS会话,则它将关闭连接。如下:
,作为脚本块以脚本块的关闭而运行
$job = Start-Job -ScriptBlock {
# specify arguments to send-mailmessage as argument hash below, then splat
$mailArgs = $args[0];
Send-MailMessage @mailArgs;
} -ArgumentList @(@{
To = "Example Person <ex@example.com>";
From = "Example Person <ex@example.com>";
Subject = "Test mail";
SmtpServer = "XXXXX.XXXXXXXXX.com";
dno = @('onFailure', 'onSuccess', 'Delay');
});
# wait for job to complete (timeout after 30 seconds)
wait-job $job -Timeout 30;
# get result of job (if any)
receive-job $job;