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

Outlook VBA导出邮件至osTicket时多附件JSON格式异常问题

解决Outlook VBA生成osTicket工单JSON多附件格式问题

你当前的问题是把所有附件都塞进了同一个Dictionary,导致生成的JSON里attachments数组只有一个对象,包含多个附件键值对;而osTicket要求的是数组里每个元素是独立的单附件对象。

修正思路

  • 用Collection存储每个附件对应的独立Dictionary(每个附件对应一个仅包含自身键值对的字典)
  • 循环中每次创建新字典,添加当前附件信息后加入Collection
  • 最后将整个Collection转换为JSON数组

修正后的完整代码

1. 调整附件处理循环

Dim attachmentsColl As New Collection ' 存储每个附件的独立字典

If myMsg.attachments.Count > 0 Then
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    For i = 1 To myMsg.attachments.Count
        Set oFile = myMsg.attachments.Item(i)
        
        If oFile.Size <= MAX_ATTACHMENT Then
            sTmpFile = fs.GetTempName
            oFile.SaveAsFile sTmpFile
            
            n.dataType = "bin.base64"
            Set data = CreateObject("ADODB.Stream")
            data.Type = 1 'Binary
            data.Open
            data.LoadFromFile sTmpFile
            n.nodeTypedValue = data.Read
            
            n.Attributes.removeNamedItem "dt:dt"
            
            ' 每次循环创建新字典,仅存当前附件信息
            Dim singleAttm As New Dictionary
            singleAttm.Add oFile.FileName, "data:" & oFile.PropertyAccessor.GetProperty(PR_ATTACH_CONTENT_TYPE) & ";base64," & n.nodeTypedValue
            
            ' 将单附件字典加入Collection
            attachmentsColl.Add singleAttm
            
            Kill sTmpFile
            Set singleAttm = Nothing ' 释放对象
        End If
    Next
End If

2. 调整JSON生成代码

Dim Body As New Dictionary

Body.Add "alert", "true"
Body.Add "autorespond", "true"
Body.Add "source", "API"
Body.Add "name", myMsg.SenderName
Body.Add "email", FromAddress
Body.Add "subject", myMsg.Subject
Body.Add "topicId", CStr(rubriq)
Body.Add "message", "data:text/html," & strData 'myMsg.HTMLBody

' 将存储所有附件的Collection赋值给attachments字段
If attachmentsColl.Count > 0 Then
    Body.Add "attachments", attachmentsColl
End If

Dim json As String
json = JsonConverter.ConvertToJson(Body, Whitespace:=" ")

说明

VBA-JSON库会自动将Collection转换为JSON数组,数组中的每个Dictionary会转为独立的JSON对象,最终生成的格式将完全符合osTicket的要求。

内容的提问来源于stack exchange,提问作者Breflex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:51:17