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

时间:2012-08-15 14:42:40

标签: smtp biztalk biztalk-2010

我正在尝试通过BizTalk SMTP发送端口发送消息。具体来说,我通过业务流程的“指定后期”端口发送消息。我的目标是将邮件正文附加到已发送的电子邮件中,其中包含我选择的附件文件名。

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

我试过了:

  1. 此部分包含单个部分+设置MIME.FileName的多部分消息。
  2. 两部分(两者都附有)的多部分消息+两部分设置MIME.FileName(非身体部分正确地具有附件名称,身体部分没有)。
  3. 标准邮件+在邮件上设置MIME.FileName
  4. 我已尝试使用“仅附加身体部位”和“附加所有部分”的SMTP适配器上的所有配置,但都没有。

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以在消息分配形状内的业务流程中执行此操作。使用multipart,消息将如下所示:

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

答案 1 :(得分: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;
}