You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell邮件脚本解析错误修复求助:字符串终止符缺失问题

让我一步步帮你排查和修复这个PowerShell邮件脚本的问题:

首先解决直接触发报错的语法问题

你看到的TerminatorExpectedAtEndOfString错误,核心原因是脚本里的引号用了HTML转义实体",而不是PowerShell能识别的普通双引号"。PowerShell会把"当成字符串的一部分,导致每个字符串都没有正确闭合,所以抛出了语法解析错误。

你需要把脚本里所有的"替换成标准的双引号"

然后修复其他逻辑/参数错误

除了语法问题,脚本还有几个会导致运行失败的隐藏问题:

  • 未定义$From变量Send-MailMessage必须指定-From参数,但你的脚本里只定义了$login却没设置$From,需要补充这个变量。
  • $heslo变量被错误覆盖:你先把密码赋值给$heslo = "MyPassword",但后面又重新赋值为ConvertTo-SecureString "heslo" -AsPlainText –Force——这里你把字符串"heslo"当成了密码,而不是之前定义的$heslo变量,会直接导致认证失败。
  • 附件路径不完整$Attachment = "test"只写了文件名,PowerShell大概率找不到这个文件,需要提供完整的文件路径(比如"C:\Users\thoma\Documents\test.jpg"),或者确保文件在脚本执行的当前目录下。
  • Gmail SMTP认证注意事项:如果你的Gmail账号开启了两步验证,必须使用应用专用密码代替普通密码;如果没开两步验证,需要临时允许"不太安全的应用访问"(不推荐,建议开启2FA后使用应用密码)。

修复后的完整脚本

# 配置邮件核心参数
$From = "andrew.spmr01@gmail.com"
$login = $From
$heslo = "你的应用密码或普通密码"
$To = "mek@mailinator.com"
$Copy = "andrew.spmr01@gmail.com"
$Attachment = "C:\Users\thoma\Documents\test.jpg" # 替换为实际的附件完整路径
$Subject = "Photos of Drogon"
$Body = "<br>Please see attached picture for reference."
$SMTPServer = "smtp.gmail.com"
$SMTPPort = 587 # 端口可以直接用数字,无需加引号

# 转换密码为安全字符串格式
$securePassword = ConvertTo-SecureString $heslo -AsPlainText -Force
$autentizace = New-Object System.Management.Automation.PSCredential($login, $securePassword)

# 发送邮件(添加了-BodyAsHtml参数,让HTML标签生效)
Send-MailMessage -From $From -To $To -Cc $Copy -Subject $Subject -Body $Body -BodyAsHtml -SmtpServer $SMTPServer -Port $SMTPPort -UseSsl -Credential $autentizace -Attachments $Attachment

额外优化说明

  • 我把用于安全字符串的变量改成了$securePassword,避免和原始密码变量$heslo混淆,你也可以保持原来的命名,但要注意不要重复赋值。
  • 添加了-BodyAsHtml参数,因为你的邮件正文用了HTML换行标签<br>,不加这个参数的话,标签会被当成普通文本显示。
  • $SMTPPort直接用数字587即可,PowerShell会自动识别为整数类型,比字符串更规范。

内容的提问来源于stack exchange,提问作者Tomáš T.

火山引擎 最新活动