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

Powershell中如何不使用文件路径为$SMTPMessage.Attachments.Add添加二进制附件

解决方案

你可以使用System.Net.Mail.Attachment类支持流输入的重载构造函数实现需求,首先需要将二进制字节数组封装为MemoryStream对象再传入构造参数即可。

完整可运行代码片段

# 提前定义的变量示例(你可以根据实际场景调整赋值)
# $binary = [IO.File]::ReadAllBytes("C:\test\example.pdf") # 存储附件原始二进制数据的字节数组
# $mimetype = "application/pdf" # 附件对应的MIME类型字符串
# $attachmentFileName = "月度报告.pdf" # 可选,定义收件人看到的附件显示名,建议指定
# $SMTPMessage 为已初始化的System.Net.Mail.MailMessage对象
# $SMTPClient 为已配置SMTP服务器、发件人信息的System.Net.Mail.SmtpClient对象

# 1. 将二进制字节数组转换为内存流
$memoryStream = New-Object System.IO.MemoryStream(,$binary)

# 2. 通过流创建Attachment对象
$attachment = New-Object System.Net.Mail.Attachment($memoryStream, $attachmentFileName, $mimetype)

# 3. 添加附件并发送邮件,逻辑和原有代码一致
$SMTPMessage.Attachments.Add($attachment)
$SMTPClient.Send($SMTPMessage)

# 可选:发送完成后释放资源
$memoryStream.Dispose()
$attachment.Dispose()

注意事项

  • 如果不需要指定附件显示名,可省略$attachmentFileName参数,调用语法改为New-Object System.Net.Mail.Attachment($memoryStream, [System.Net.Mime.ContentType]::new($mimetype))
  • 构造MemoryStream时二进制参数前的逗号不可省略,是PowerShell中强制把字节数组作为单个参数传递的语法要求,省略会导致构造失败

内容的提问来源于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 07:27:04