You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell通过Exchange Server批量发邮件如何设置10秒发送间隔

PowerShell 依托Exchange批量发信添加10秒发送间隔修改方案

核心修改逻辑

不需要改动原有脚本的发信核心逻辑,只要在单封邮件发送完成的位置插入等待指令,就能实现固定间隔逐封发送的效果,避免短时间大量发信触发Exchange的垃圾邮件拦截规则。额外补充了基础进度提示、异常容错逻辑,不影响原有功能,运行稳定性更高。

关键修改点

  • 新增可配置的发送间隔参数,后续调整间隔时长直接修改参数值即可,无需改动核心发送逻辑
  • 在每封邮件发送成功后加入Start-Sleep等待指令,默认设置等待时长为10秒
  • 增加发送计数与控制台时间戳提示,可实时查看发送进度
  • 补充基础异常捕获,单条收件人格式错误、发送失败时自动跳过,不会中断后续批量任务

修改后完整脚本

$thisScript = $myInvocation.MyCommand.Path
$scriptRoot = Split-Path(Resolve-Path $thisScript)
$recipientsListFile = Join-Path $scriptRoot "recipientsList.txt"
$EmailBodyFile = Join-Path $scriptRoot "EmailBody.txt"

$arrEmailBody =@()
$arrEmailBody += Get-Content $EmailBodyFile
$strsmtp = "<SMTP Server>"
$strSubject = "<Email Subject>"
$fromEmail = "<Sender's Email>"
$fromName = "<Sender's Name>"
$Sender = New-Object System.Net.Mail.MailAddress($fromEmail, $fromName)

$port = 25

$SMTPClient = New-Object System.Net.Mail.smtpClient
$SMTPClient.host = $strsmtp
$SMTPClient.port = $port

# 发送间隔配置(单位:秒),调整间隔直接修改这个值即可
$sendInterval = 10
# 发送成功计数器
$successCount = 0

foreach ($item in (Get-Content $recipientsListFile))
{
    $MailMessage = New-Object System.Net.Mail.MailMessage
    $strName = ($item.split(";"))[0]
    $strEmail = ($item.split(";"))[1]

    $strBody = @"
Dear $strName


"@
    Foreach ($line in $arrEmailBody)
    {
        $strBody = $strBody + @"
        $line

"@
    }

    $objRecipient = New-Object System.Net.Mail.MailAddress($strEmail, $strName)
    $MailMessage.Subject = $strSubject
    $MailMessage.Sender = $Sender
    $MailMessage.From = $Sender
    $MailMessage.To.add($objRecipient)
    $MailMessage.Body = $strBody

    # 异常捕获+间隔等待逻辑
    try {
        $SMTPClient.Send($MailMessage)
        $successCount++
        Write-Host "[$(Get-Date -Format 'HH:mm:ss')] 第 $successCount 封邮件已发送至 $strEmail,等待 $sendInterval 秒后发送下一封"
        # 核心等待逻辑:发完后暂停指定时长再进入下一轮循环
        Start-Sleep -Seconds $sendInterval
    }
    catch {
        Write-Host "[$(Get-Date -Format 'HH:mm:ss')] 发送至 $strEmail 失败,错误:$($_.Exception.Message),跳过该收件人"
    }
    finally {
        Remove-Variable objRecipient -ErrorAction SilentlyContinue
        Remove-Variable mailMessage -ErrorAction SilentlyContinue
    }
}

Write-Host "批量发送任务完成,累计成功发送 $successCount 封邮件"

使用说明

  • 如果后续需要调整发送节奏,直接修改脚本开头$sendInterval变量的数值即可,比如设置为20就是每20秒发1封
  • 运行脚本时控制台会实时打印发送进度、失败原因,不需要额外查日志
  • 收件人列表保持原有格式即可:每行一条数据,姓名和邮箱用分号分隔

内容的提问来源于stack exchange,提问作者SDJAnu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:51:59