【问题标题】:Long delay before email arrives after PowerShell Send-MailMessage command (~2 and a half minutes)PowerShell Send-MailMessage 命令后电子邮件到达前的长时间延迟(约 2 分半钟)
【发布时间】:2019-05-18 01:17:52
【问题描述】:

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

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

【问题讨论】:

  • 我会先检查 SMTP 服务器。例如,它可能有一些内置的延迟来吓跑未知的发件人。我对 Send-MailMessage 的体验是消息会立即发送和传递
  • 您是否检查了收到的邮件中的标题?查看它通过了多少台服务器,或者查看它是否显示与 Outlook 发送的邮件显示的不同的垃圾邮件测试标签,或任何其他差异。

标签: powershell email smtp


【解决方案1】:

因为这是我想提供答案的第一个谷歌结果 - 因为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;

【讨论】:

    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2012-09-09
    • 2012-04-27
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多