如何通过命令提示符使用PowerShell发送邮件?附脚本示例
使用PowerShell通过命令提示符发送邮件(基于Gmail SMTP)
我来帮你补全并优化你的PowerShell邮件脚本,再告诉你怎么在命令提示符(CMD)里调用它来发送邮件——毕竟处理Gmail SMTP的坑我熟得很~
1. 完整的PowerShell脚本(补全并优化版)
你的脚本差了最后几行关键代码,我帮你补全还加了一些实用配置:
param( [Parameter(Mandatory=$true)] [string]$EmailFrom, [Parameter(Mandatory=$true)] [string]$EmailTo, [Parameter(Mandatory=$true)] [string]$Subject, [Parameter(Mandatory=$true)] [string]$Body ) # Gmail账户配置(注意密码的特殊要求,后面会讲) $Username = 'user@gmail.com' $Password = 'your-app-password-here' # 创建邮件消息对象 $emailMsg = New-Object System.Net.Mail.MailMessage $emailMsg.From = $EmailFrom $emailMsg.To.Add($EmailTo) $emailMsg.Subject = $Subject $emailMsg.Body = $Body $emailMsg.IsBodyHtml = $false # 如果要发HTML邮件,改成$true就行 # 配置SMTP客户端并发送邮件 $smtpClient = New-Object System.Net.Mail.SmtpClient $smtpClient.Host = 'smtp.gmail.com' $smtpClient.Port = 587 $smtpClient.EnableSsl = $true $smtpClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password) $smtpClient.Send($emailMsg) # 清理资源(好习惯) $emailMsg.Dispose() $smtpClient.Dispose() Write-Host "邮件发送成功!"
脚本优化说明:
- 给参数加上了
[Parameter(Mandatory=$true)],确保你调用时不会漏传必要信息 - 新增了
IsBodyHtml参数,方便切换纯文本/HTML邮件格式 - 补全了
NetworkCredential的完整写法和关键的Send()发送命令 - 添加了对象清理和成功提示,方便你确认执行结果
2. 在命令提示符(CMD)中调用脚本
直接用powershell.exe命令来执行你的脚本,把参数按要求传进去就行:
powershell.exe -File "C:\你的脚本路径\SendEmail.ps1" -EmailFrom "你的发件邮箱@xxx.com" -EmailTo "收件人邮箱@xxx.com" -Subject "测试邮件标题" -Body "这是通过CMD调用PowerShell发送的邮件内容"
注意:如果脚本路径包含空格,一定要用双引号把路径括起来,否则CMD会识别错误。
3. Gmail用户必须注意的坑
Gmail的SMTP不是随便填密码就能用的,这里有两个关键要点:
- 启用两步验证的账户:直接用登录密码会报错!必须去Google账户的「安全」设置里生成应用密码(选择「邮件」应用、「Windows计算机」设备类型,生成后把这个密码填到脚本里)
- 未启用两步验证的账户:Gmail默认会阻止“不太安全的应用”,你需要去账户设置里开启「允许不太安全的应用」(不过非常不推荐这种方式,建议优先启用两步验证+应用密码,更安全)
- 端口和SSL必须是
587+EnableSsl=$true,用其他端口或关闭SSL都会被Gmail拒绝连接
内容的提问来源于stack exchange,提问作者kurokirasama
相关产品推荐
相关产品推荐

