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

如何通过PowerShell实现Office365在线Outlook的定时邮件发送

Office 365 在线版PowerShell脚本定时发信实现方法

现有脚本已跑通即时发信逻辑,无需重构核心发信代码,通过两种方式即可实现定时需求:

推荐方案:依托Windows任务计划程序触发发信

这是稳定性最高、故障排查最便捷的实现方式,完全适配现有代码结构:

  • 保留脚本中所有SMTP配置、邮件内容构造的逻辑,将$Smtp.Send($Message)作为脚本的最终执行动作
  • 打开系统自带的「任务计划程序」新建定时任务:触发器按需配置发送规则(支持单次定点发送、按固定周期重复发送),操作项设置为启动PowerShell进程,执行路径指向已写好的发信脚本
  • 任务配置中务必勾选「不管用户是否登录都要运行」「使用最高权限运行」选项,避免到点因会话锁定、权限不足导致脚本无法执行
    这种方案不存在脚本长时间挂起等待的资源占用问题,发信执行结果会被任务计划完整记录日志,不会因机器休眠、进程被误关导致邮件漏发

备选方案:脚本内置等待逻辑实现单次定时

如果需要在单次脚本运行流程中直接嵌入定时逻辑,不需要依赖外部调度工具,仅需在发信动作前增加一段等待判断,代码改动量极小:

  • 在完成SMTP配置、邮件内容对象构造后,先定义目标发送时间,例如固定写定需要发送的时间点:$TargetSendTime = Get-Date "2024-06-20 16:00:00"
  • 计算当前时间与目标时间的差值,等待到点后再执行原有Send动作,参考代码:
# 计算当前时间到目标发送时间的等待时长
$WaitDuration = New-TimeSpan -Start (Get-Date) -End $TargetSendTime
# 仅当等待时长为正值时执行休眠
if ($WaitDuration.TotalSeconds -gt 0) {
    Start-Sleep -Seconds $WaitDuration.TotalSeconds
}
# 到点触发原有即时发信逻辑
$Smtp.Send($Message)
  • 需明确该方案的硬限制:运行脚本的机器在等待期间不能关机、不能注销、不能断网,一旦PowerShell进程被终止,定时发信流程就会直接中断

补充提示:当前使用的System.Net.Mail.SmtpClient类已被微软标记为弃用,长期使用可后续替换为MailKit组件,现有定时逻辑无需改动,换用新组件后可无缝适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 13:24:05