为啥我不能通过 BizTalk SMTP 适配器更改正文部分的附件名称?

Posted

技术标签:

【中文标题】为啥我不能通过 BizTalk SMTP 适配器更改正文部分的附件名称?【英文标题】:Why can't I change the attachment name of the body part via the BizTalk SMTP Adapter?为什么我不能通过 BizTalk SMTP 适配器更改正文部分的附件名称? 【发布时间】:2012-08-11 21:00:03 【问题描述】:

我正在尝试通过 BizTalk SMTP 发送端口发送消息。具体来说,我通过编排的“稍后指定”端口发送消息。我的目标是使用我选择的附件文件名将消息正文附加到已发送的电子邮件中。

但是,无论我尝试什么,附件名称仍然是“body.csv”

我试过了:

    包含单个部分的多部分消息 + 在此部分上设置 MIME.FileName。 包含两部分的多部分消息(均附加)+ 在两部分上设置 MIME.FileName(非正文部分正确具有附件名称,正文部分没有)。 标准消息+在消息上设置MIME.FileName

我已经在 SMTP 适配器上的“仅附加正文部分”和“附加所有部分”的所有配置上进行了尝试,但都没有成功。

目前我有“仅附加正文部分”和一些固定文本(在发送端口上配置)用于电子邮件内容。

我了解到有些人在过去版本的 BizTalk 中使用了 MIME 编码器管道,但显然这对于​​ SMTP 适配器是不必要的。其他人使用自定义管道组件来设置MIME.FileName,这是我要去的地方,但如果MIME.FileName 已经在我的编排中设置,则似乎没有必要。

对于这个相对简单的问题,我是否遗漏了一些基本的东西?

【问题讨论】:

【参考方案1】:

您可以在消息分配形状内的编排中执行此操作。使用多部分,消息将如下所示:

Message.part(MIME.FileName) = "your file.name";

【讨论】:

这可能适用于旧版本的 Outlook,但不适用于 Outlook 365 和更新版本的 Outlook。【参考方案2】:

第二个假设工作。 尝试使用帮助程序的这段代码(对我有用):

public static void SetFileName(string emailMessage,XLANGMessage message)

    Byte[] b = GetBytes(emailMessage);
    MemoryStream stream = new MemoryStream(b);
    IStreamFactory factory = new BinaryStreamFactory(stream);
    string partName = FileName + "." + FileType;
    message.AddPart(factory, partName);
    XLANGPart part = message[partName];
    part.SetPartProperty(typeof(MIME.FileName), partName);


static byte[] GetBytes(string str)

    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;

【讨论】:

是的,我必须做一些几乎相同的事情,这意味着在编排中调用我的 FF 管道,将处理后的值作为附加部分添加,并确保使用正文(我将其设置为通用文本)作为电子邮件正文(在 SMTP 适配器的撰写选项卡中)。永远无法附加和重命名正文部分,这很糟糕,因为现在我正在发送只能作为电子邮件发送的消息。 您的代码是为了编排权,还是管道?

以上是关于为啥我不能通过 BizTalk SMTP 适配器更改正文部分的附件名称?的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk MQSC 适配器

Microsoft.BizTalk.Component.MIMEException

BizTalk SMTP 发送带有附件的邮件(无编排,自定义发送管道组件)

WF 4 还是 BizTalk 2010?

适配器减慢 BizTalk

BizTalk DB2 适配器连接错误