如何通过Zimbra SOAP API下载日历事件中的二进制附件?
获取Zimbra日历事件二进制附件的正确方法
方法一:在GetAppointmentRequest中直接获取附件内容
你之前调用GetAppointmentRequest仅拿到附件元数据,只需在请求中添加参数即可让接口返回二进制附件内容:
- 请求需包含
content参数并设为1,同时指定目标附件的part编号(即你获取到的part字段值,比如示例中的2) - 示例SOAP请求结构:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <context xmlns="urn:zimbra"> <authToken>你的认证令牌</authToken> </context> </soap:Header> <soap:Body> <GetAppointmentRequest xmlns="urn:zimbraCalendar"> <id>日历事件的ID</id> <content>1</content> <part>2</part> </GetAppointmentRequest> </soap:Body> </soap:Envelope>
- 返回结果中,对应
part的附件内容会以Base64编码形式嵌入,解码后即可得到二进制文件。
方法二:使用GetAttachmentRequest单独获取附件
若无需重新拉取整个事件数据,可单独调用GetAttachmentRequest接口:
- 请求需传入日历事件ID(作为
itemId)和附件的part编号 - 示例SOAP请求结构:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <context xmlns="urn:zimbra"> <authToken>你的认证令牌</authToken> </context> </soap:Header> <soap:Body> <GetAttachmentRequest xmlns="urn:zimbraMail"> <itemId>日历事件的ID</itemId> <part>2</part> </GetAttachmentRequest> </soap:Body> </soap:Envelope>
- 注意:该接口属于
urn:zimbraMail命名空间,需确保请求的命名空间配置正确。
调用GetMsgRequest报错的原因
GetMsgRequest是用于获取邮件消息的接口,日历事件属于日历项(Appointment)而非邮件消息,直接传入日历ID会因接口用途不匹配触发服务器错误。
内容的提问来源于stack exchange,提问作者Jeff McKay
相关产品推荐
相关产品推荐

