上一篇
如何通过CMD命令轻松实现邮件发送?
- 电脑教程
- 2025-05-29
- 2893
通过cmd命令发送邮件可使用PowerShell的Send-MailMessage命令,需指定发件人、收件人、SMTP服务器及凭据,示例命令:Send-MailMessage -To “接收邮箱” -From “发送邮箱” -Subject “主题” -Body “内容” -SmtpServer “smtp.example.com” -Credential (Get-Credential),需提前配置SMTP服务权限。
在Windows系统中,通过CMD命令或PowerShell脚本发送邮件,可以用于自动化通知、脚本集成等场景,以下是4种实用方法,包含详细步骤和注意事项,适用于不同需求。
使用Telnet命令(基础SMTP协议)
适用场景:测试邮件服务器连通性
前置条件:
- 开启Telnet客户端(控制面板→程序→启用或关闭Windows功能→勾选Telnet Client)
- 已知SMTP服务器地址、端口(如Gmail的smtp.gmail.com:587)
操作步骤:
telnet smtp.example.com 25 HELO yourdomain.com AUTH LOGIN [输入Base64编码的用户名] [输入Base64编码的密码] MAIL FROM:<sender@example.com> RCPT TO:<recipient@example.com> DATA Subject: 测试邮件 这是通过Telnet发送的测试邮件内容。 . QUIT
注意:
- 密码需用Base64编码(可用在线工具转换)
- 部分邮箱需开启SMTP服务(如Gmail需启用”低安全性应用访问”)
- 端口25可能被运营商屏蔽,可尝试587或465(SSL)
通过PowerShell脚本(推荐)
适用场景:Windows 7及以上系统,支持SSL加密
脚本示例:
$EmailFrom = "sender@example.com" $EmailTo = "recipient@example.com" $Subject = "系统通知" $Body = "服务器运行状态正常" $SMTPServer = "smtp.example.com" $SMTPPort = 587 $Username = "sender@example.com" $Password = "your_password" | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) Send-MailMessage -From $EmailFrom -To $EmailTo -Subject $Subject -Body $Body ` -SmtpServer $SMTPServer -Port $SMTPPort -UseSsl -Credential $Credential
参数说明:
-UseSsl
:强制加密传输ConvertTo-SecureString
:保护密码安全- 保存为
.ps1
文件后,右键选择”使用PowerShell运行”
使用Blat工具(第三方开源软件)
适用场景:频繁发送需求,支持附件
操作流程:
- 下载Blat:访问官网下载并解压到
C:blat
- 配置SMTP:
blat -install smtp.example.com sender@example.com 3 587
- 发送邮件:
blat -to recipient@example.com -subject "报告附件" -body "详情请查收附件" -attach C:report.pdf
参数说明:
-install
后的数字3表示尝试次数- 支持多个附件:
-attach "file1.txt,file2.jpg"
VBS脚本方法(兼容旧系统)
适用场景:Windows XP/2003等旧版本系统
脚本代码:
Set objEmail = CreateObject("CDO.Message") objEmail.From = "admin@example.com" objEmail.To = "user@example.com" objEmail.Subject = "旧系统通知" objEmail.Textbody = "此邮件通过VBS脚本发送" objEmail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.com" objEmail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 objEmail.Configuration.Fields.Update objEmail.Send
保存为.vbs
文件后双击运行。
▍安全注意事项
- 密码保护:避免在脚本中明文存储密码,建议:
- 使用Windows Credential Manager
- 创建应用专用密码(如Gmail两步验证用户)
- 反垃圾策略:
- 控制发送频率(商业邮箱每日上限约100封)
- 添加DKIM/SPF记录
- 日志监控:建议记录发送记录到文本文件:
echo %date% %time% 发送至recipient@example.com >> mail.log
▍常见问题解答
Q1:出现”无法连接到服务器”错误?
- 检查防火墙是否开放SMTP端口
- 测试Telnet连接:
telnet smtp.example.com 587
Q2:邮件进入垃圾箱?
- 添加发件人域名解析(MX记录)
- 减少敏感词如”免费”、”优惠”
Q3:PowerShell提示”禁止运行脚本”?
以管理员身份执行:
Set-ExecutionPolicy RemoteSigned
参考文献
- Microsoft PowerShell文档:Send-MailMessage
- Blat官方文档:blat.net
- SMTP协议标准:RFC 5321