在PowerShell Send-MailMessage命令之后,电子邮件到达之前的延迟很长(大约两分半钟)

时间:2018-12-17 16:23:18

标签: powershell email smtp

我正在编写PowerShell脚本,以检查多台PC上的特定文件,并在找到它们时发送电子邮件。它可以工作,但是电子邮件需要很长的时间才能到达(大约两分半钟)。我试过只运行Send-MailMessage命令并获得相同的结果,因此减慢它的速度与脚本不同。而且并非一直如此,命令会立即成功执行。 Outlook在此建筑物中发送和接收其他电子邮件的速度要快得多,我已经检查了它正在使用的SMTP服务器,并使用了相同的电子邮件服务器。我搜索了其他有此问题的人,但只发现了Send-MailMessage超时或根本无法工作的示例。

这是我一直在使用的命令(到/从/ 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参数时,我会得到相同的结果)。相反,在两分半钟后到达时,我会收到一条成功通知。

1 个答案:

答案 0 :(得分:0)

因为这是第一个Google搜索结果,所以我想提供一个答案-由于this post implies 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;