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

如何在PowerShell中将SQL的varbinary(max)数据附加到SMTPMessage

问题修复方案

你的问题核心不是附件添加逻辑错误,是Invoke-Sqlcmd默认会截断长二进制数据,默认的-MaxBinaryLength参数值为1024,所以你查询拿到的二进制本身就只有前1KB,自然最终附件大小不对。

修复步骤

  • 修改查询语句,给Invoke-Sqlcmd增加-MaxBinaryLength参数,设置为足够大的值,如果你不确定最大附件大小,可以直接设置为0代表不限制长度:
#Get the attachment binary into a variable from sql server
$Query = "SELECT AttachmentBinary FROM [dbo].MyFiles"
# 增加-MaxBinaryLength参数,0代表不限制二进制长度
$e= Invoke-Sqlcmd -Query $Query -ServerInstance $server -MaxBinaryLength 0 <# 其余原有参数保持不变 #>
  • 验证数据完整性:你可以先在SQL Server中执行SELECT DATALENGTH(AttachmentBinary) FROM [dbo].MyFiles得到二进制数据的真实长度,再在PowerShell中执行$e.AttachmentBinary.Length,两者一致就说明数据获取没有截断。
  • 原有附件处理逻辑不需要修改,如果需要让收件人看到带后缀的正常文件名,可以调整附件创建代码,增加文件名参数:
$contentStream = New-Object System.IO.MemoryStream(,$e.Attachmentbinary)
# 第三个参数指定附件显示的文件名,可根据业务需求修改
$MailAttachment = New-Object System.Net.Mail.Attachment($contentStream, "application/pdf", "你的附件名.pdf")
$SMTPMessage.Attachments.Add($MailAttachment)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:01