VB开发Windows服务发邮件 PDF附件变application_pdf.txt问题
VB.NET 发送PDF附件被重命名为application_pdf.txt问题修复
核心根因
代码存在两处不符合MIME邮件规范的问题,导致邮件网关/客户端无法识别正确的附件文件名,触发默认命名规则(将MIME类型的/替换为_,追加.txt后缀):
- 二进制内容错误转字符串:读取PDF字节后逐字节用
Chr()拼接为字符串的逻辑完全不适用于二进制文件。Chr()按UTF-16处理字符,逐字节拼接会破坏二进制流结构,且Attachment.CreateAttachmentFromString本身是为文本类附件设计的重载,处理二进制文件时会出现元数据识别异常。你之前在Gmail环境下未触发问题,仅因为Gmail网关兼容性较强,会自动补全缺失的元数据,其他SMTP服务商无此兼容逻辑就会触发重命名。 - 附件元数据缺失:仅设置
ContentDisposition.FileName不符合MIME规范,必须同步设置附件ContentType.Name属性,并为二进制附件指定Base64传输编码,否则网关会判定附件元数据缺失,自动生成默认文件名。
修复方案
不需要改动统一处理两种附件来源的架构,只需要将附件传递格式从字符串改为字节数组,补全附件必填元数据即可:
1. 修改文件读取逻辑,删除二进制转字符串的错误代码
原读取代码:
Dim attachBytes() As Byte = Nothing attachBytes = My.Computer.FileSystem.ReadAllBytes(FileDir & "\" & msg.attachFile) mailAttachFile = "" For Each attbyt As Byte In attachBytes mailAttachFile &= Chr(attbyt) Next
修改后直接传递字节数组,不要做字符串转换:
' 直接读取为字节数组,路径拼接建议用Path.Combine避免斜杠问题 Dim attachBytes() As Byte = My.Computer.FileSystem.ReadAllBytes(IO.Path.Combine(FileDir, msg.attachFile))
FTP场景下下载的附件也统一存为字节数组传入发送函数,即可实现发送层不感知附件来源的需求。
2. 修改附件创建逻辑,补全所有规范要求的元数据
原附件添加代码:
If attached <> "" And attachMIME <> "" And attachname <> "" Then mail.Attachments.Add(Attachment.CreateAttachmentFromString(attached, attachMIME)) mail.Attachments.Last().ContentDisposition.FileName = attachname End If
修改为通过内存流加载二进制附件,补全所有属性:
If attachBytes IsNot Nothing AndAlso attachBytes.Length > 0 AndAlso attachMIME <> "" AndAlso attachname <> "" Then ' 用内存流加载字节数组创建附件,适配二进制格式 Dim attachStream As New IO.MemoryStream(attachBytes) Dim targetAttach As New Attachment(attachStream, attachname, attachMIME) ' 同步设置两处文件名属性,兼容所有邮件客户端解析规则 targetAttach.Name = attachname targetAttach.ContentDisposition.FileName = attachname ' 二进制附件必须指定Base64传输编码 targetAttach.TransferEncoding = Net.Mime.TransferEncoding.Base64 mail.Attachments.Add(targetAttach) End If
验证标准
修改后发出的邮件原始MIME中,附件段应包含如下规范头,即可彻底解决重命名问题:
Content-Type: application/pdf; name=Statement.pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=Statement.pdf
内容的提问来源于stack exchange,提问作者droopsnoot
相关产品推荐
相关产品推荐

