如何在PowerShell中将文件内容转为字符串作为SMTP邮件正文?
解决PowerShell中Get-Content读取文件内容到字符串用于Send-MailMessage的问题
我太懂这个报错的痛点了!你用Get-Content直接赋值给$body的时候,它默认返回的是字符串数组(文件里的每一行对应数组的一个元素),但Send-MailMessage的-Body参数只接受单个字符串类型的输入,这就是为啥会弹出那个类型转换失败的错误。
你尝试用Convert-String没成功很正常——这个 cmdlet 主要是用来做字符串格式转换的,不是用来把数组合并成单字符串的。给你两个靠谱的解决方案:
方案一:先把文件内容转成字符串再赋值给变量
用Out-String可以把Get-Content返回的数组完整转换成带格式的单字符串,完美保留原文件的换行和排版:$body = Get-Content 'C:\somewhere\some-file.html' | Out-String Send-MailMessage -To [recipient] -From [sender] -Subject [subject] -Body $body -SmtpServer [ip address] -BodyAsHtml方案二:直接在命令里嵌套转换(更简洁)
像你最后找到的那样,把Get-Content和Out-String的组合直接放到-Body参数的括号里,一行搞定,还省了中间变量:Send-MailMessage -To recipient@domain.com -From sender@domain.com -Subject "Test" -Body (Get-Content 'C:\somewhere\some-file.html' | Out-String) -SmtpServer 123.456.789.012 -BodyAsHtml
⚠️ 别忘了加-BodyAsHtml参数!如果你的文件是HTML格式的邮件内容,不加这个参数的话,收件人看到的会是一堆原始的HTML代码,而不是渲染好的邮件。
内容的提问来源于stack exchange,提问作者geco17
相关产品推荐
相关产品推荐

