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
相关产品推荐
相关产品推荐

