BizTalk 2020 SMTP适配器自定义附件文件名异常求助
BizTalk 2020 SMTP适配器附件文件名问题解决
问题根源
当SMTP适配器启用“仅附加正文部分”选项时,适配器会强制将附件命名为body,仅当存在http://schemas.microsoft.com/BizTalk/2003/mime-properties#FileName属性时,提取其扩展名替换默认的无扩展名,这就是你看到body.ext的原因。该模式下适配器会忽略属性中的主文件名部分。
解决方法
方法1:修改SMTP适配器配置(推荐)
- 取消SMTP适配器配置中的“仅附加正文部分”勾选。
- 将“消息格式”设置为“纯文本”或“HTML”,并在“消息正文”中输入空字符串或占位文本(如单个空格)。
- 确保你的自定义管道组件位于发送管道的FlatFileAssembler之后,且代码中设置的
FileName属性(命名空间http://schemas.microsoft.com/BizTalk/2003/mime-properties)正确。 - 此时SMTP适配器会将消息体作为附件发送,附件名完全使用你指定的
OutgoingAttachedFileName值。
方法2:调整管道组件代码,设置上下文属性
替换原组件中设置BodyPart.PartProperties的逻辑,改为设置消息上下文属性:
public IBaseMessage Execute(IPipelineContext pc, IBaseMessage inmsg) { // 设置MIME文件名属性到消息上下文 inmsg.Context.Write(TargetProperty, TargetNamespace, OutgoingAttachedFileName); // 补充设置文件属性,增强适配器识别度 inmsg.Context.Write("FileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", OutgoingAttachedFileName); return inmsg; }
- 配合方法1中的适配器配置修改(取消“仅附加正文部分”)即可生效。
方法3:使用MIME/SMIME编码器组件
- 在发送管道中移除自定义组件,添加MIME/SMIME编码器组件,将其“允许非MIME消息”配置为
True。 - 通过自定义管道组件或发送端口属性,设置
http://schemas.microsoft.com/BizTalk/2003/mime-properties#FileName为目标文件名。 - 适配器配置同方法1,取消“仅附加正文部分”并设置空正文。
内容的提问来源于stack exchange,提问作者MichaelMS
相关产品推荐
相关产品推荐

