Office365 执行多个请求时出现“addFileAttachmentAsync”错误

2024-02-15

我遇到问题添加文件附件异步。我有 2 个数组:嵌入文件(包含将附加到正文中的文件名)和附件(包含将作为附件的文件名)。我有2个for为每个数组运行循环,它们应该对数组中的每个文件向 Exchange Server 发出 GET 请求并获取二进制文件。

          for (var i = 0; i < embeddedFiles.length; i++) {
                            var attachmentName = (new Date()).getTime() + ".png";
                            var count = 0;
                            var options = { isInline: true, ContentId: attachmentName, asyncContext: { UniqueName: attachmentName } };
                            var attachmentURL = "http://" + document.location.hostname + document.location.port + '/MailForms/api/GetAttachment?' + 'AttId=' + embeddedFiles[i] + '&' + 'MwToken=' + token + '&' + 'ReqId=' + data.ReqId + '&' + 'userSmtp=' + smtp;
                            Office.context.mailbox.item.addFileAttachmentAsync(
                                attachmentURL,
                                attachmentName,
                                options,

                                function (asyncResult) {
                                    if (asyncResult.status == Office.AsyncResultStatus.Failed) {
                                        app.showNotification('Failed to add attachment', asyncResult.error.message);
                                    }
                                    else {

                                        var szCID = asyncResult.asyncContext.UniqueName;
                                        //var szAddBodyData = "<br><div><img height=150 width=150 src='cid:" + szCID + "'></div><br>"
                                        var bizimCigid = "cid:" + szCID;
                                        var index = "" + count;
                                        var oldsource = oBody.find('.mw-images')[index].attributes[1].value;
                                        oldsource = bizimCigid;
                                        //imagesource.replaceWith(bizimCigid);
                                        //Office.context.mailbox.item.body.setSelectedDataAsync(szAddBodyData, { coercionType: Office.CoercionType.Html });
                                        oBody.find('.mw-images')[index].attributes[1].value = oldsource;
                                        //Office.context.mailbox.item.body.setSelectedDataAsync({ coercionType: Office.CoercionType.Html });

                                        viewModel.updateComposeFormLast(subject, oBody["0"].innerHTML);
                                        count = count +  1;
                                    }


                                }


                            );

    for (var i = 0; i < attachments.length; i++) {

                            var attachmentURL = "http://" + document.location.hostname + document.location.port + '/MailForms/api/GetAttachment?' + 'AttId=' + attachments[i] + '&' + 'MwToken=' + token + '&' + 'ReqId=' + data.ReqId + '&' + 'userSmtp=' + smtp;

                            Office.context.mailbox.item.addFileAttachmentAsync(
                                attachmentURL,
                                attachments[i],
                                {
                                    'asyncContext': {}
                                },
                                viewModel.getAttachmentsContent
                                );
                        }

上面的代码接受查询字符串并调用添加文件附件异步方法。网址没有任何问题。我在浏览器上尝试过它们,它们确实根据自定义 URL 获取了实际文件。获取附件内容是一个刚刚调用的方法console.log(“废话”)。

添加单个附件或内嵌图像时效果很好。但我需要添加多个附件和多个嵌入图像。这是我尝试过的事情:

  1. 只需添加一个附件 -works
  2. 只需添加一个内嵌图像 -works
  3. 添加图像和附件 -works但它很慢
  4. 多个附件和内嵌图像 -不起作用 .

我收到的错误:

    error OSF.DDA.Error code 9002 message "There was an internal format error." name : "InternalFormatError"*

在我看来,当您执行相同格式的多个请求时,它就会崩溃。但我不知道为什么。

有任何想法吗?


@Namig Ismayilov,addFileAttachmentAsync方法是异步的。

因此,要调用多个异步调用,您可以选择以下选项:

  1. Use Promises : (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)
  2. 通过在前一个异步方法的回调中调用下一个异步方法来使用嵌套函数调用。
  3. 使用递归和嵌套调用。这只是上面第2点的延伸。

例如,对于您的情况,这是一种使用递归附加多个文件的方法。调用者应该只调用该方法my_add_file_attachments_recursively()

function my_add_file_attachments_recursively_helper(file_attachment_arr, index, message)
{
    if (index < file_attachment_arr.length)
    {
        var file_attachment_obj = file_attachment_arr[index];

        Office.context.mailbox.item.addFileAttachmentAsync
        (
            file_attachment_obj.url,
            file_attachment_obj.name,
            {
                "asyncContext" :
                {
                    "message" : message,
                    "index" : index
                }
            },
            function (asyncResult)
            {
                var next_message = asyncResult.asyncContext.message + "id : " + asyncResult.value + " , " + "status : " + asyncResult.status + "\n";

                // add the next attachment here, recursively
                my_add_file_attachments_recursively_helper(file_attachment_arr, asyncResult.asyncContext.index + 1, next_message);
            }
        );
    }
    else
    {
        console.log(message);
    }
}

function my_add_file_attachments_recursively()
{
    var file_attachments_arr =
    [
        {
            "name" : "gold_puppy.jpg",
            "url" : "https://foo/gold_puppy.jpg"
        },
        {
            "name" : "black_puppy.jpg",
            "url" : "https://foo/black_puppy.jpg"
        },
        {
            "name" : "white_puppy.jpg",
            "url" : "https://foo/white_puppy.jpg"
        }
    ];

    my_add_file_attachments_recursively_helper(file_attachments_arr, 0, "");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Office365 执行多个请求时出现“addFileAttachmentAsync”错误 的相关文章

  • .NET v4.0 中无法识别的属性“enableSsl”

    我们已经测试运行新系统一段时间了 并将电子邮件创建到文件夹中 这样它们就不会意外发送给客户 现在我们已经打开实时电子邮件发送功能 但我们遇到了发送问题 我正在使用 ActionMailer NET 创建和发送电子邮件的代码如下 我不会包含视
  • 为 SharePoint Online O365 构建多租户应用程序

    我正在尝试为 Office 365 构建一个多租户应用程序 该应用程序专注于 SharePoint Online 并使用 OAuth2 通过 Azure 进行身份验证 该问题特定于通过 Azure 登录进行 SharePoint 访问 但仅
  • Zapier:修改 webhook 侦听器 HTTP 响应?

    某些 API 需要 Webhook 侦听器响应中的附加信息 例如 我正在尝试订阅 Outlook com 的推送通知服务 该服务描述了以下流程 Outlook 通知服务尝试使用侦听器服务验证通知 URL 它在验证请求中包含验证令牌 如果侦听
  • JavaMail 与 Oauth 和 Office365

    我正在用 Java 构建一个简单的命令行应用程序 它可以登录我的电子邮件箱 IMAP 并下载所有附件 我使用了基本身份验证 但 Microsoft 正在禁用它 因此我尝试将我的应用程序转换为使用 OAuth 在阅读了不同的 OAuth 流程
  • 在 Word.run 流程之外使用 Paragraph

    我试图首先找到一个段落 然后当用户单击按钮时 对该段落进行一些操作 我尝试使用似乎是权威书籍中的示例 Michael Zlatkovsky 的 Building Office Add Ins var global paragraph und
  • 使用回调令牌的 PHP EWS

    有没有人有幸使用 EWS 回调令牌而不是用户名 密码对来自 PHP 的 EWS SOAP 请求进行身份验证 我一直在看PHP EWS https github com jamesiarmes php ews当您在谷歌上搜索此项目时会出现该项
  • 获取组驱动器中当前 Word 文档的 OneDrive 项目 ID

    我正在研究一个Office js Word插件但文档存储在组驱动器上 我怎样才能获得其中一个或全部group id drive id and item id对于当前文档 相关问题is here https stackoverflow com
  • 我们如何强制将邮箱项目持久保存到 EWS?

    Note 这一特殊问题对我们的客户产生重大影响 这会转化为巨大的业务影响 对收入产生直接影响 TL DR 当用户在撰写电子邮件草稿时与我们的加载项交互时 我们的 Outlook Office 加载项如何最大限度地缩短电子邮件草稿发送之前所需
  • 如何使用office.js获取office应用程序版本值

    Office 应用程序版本可以在清单文件中提及 如下所示
  • 无法通过 Graph API 获取我所属的 Office 365 组

    尝试获取用户所属的所有 Office 365 组 我已在 Azure 上注册了一个 本机客户端应用程序 并仅选择了一项权限 Microsoft Graph 范围下的 读取所有组 问题 其他租户的用户收到 由于缺乏权限 呼叫主体无法同意 错误
  • 不使用 Web 服务器编写简单的 Microsoft 图形客户端

    我正在寻找编写一个脚本来更新 Office365 中的通讯组列表 我正在学习 MS Graph API 并且已经让 python REST 示例可以工作 看来所有示例 Graph API 代码 无论语言或平台如何 都假设我正在以一种或另一种
  • Excel JS - 获取范围数字格式

    我正在 React 中使用 Excel Office JS API 数据被推送到 Excel 范围 我正在尝试执行以下逻辑 检查范围 单元格格式是否为常规 如果是通用格式 则将格式设置为特定的日期时间格式 如果不是通用格式 请勿更改格式 看
  • Word 插件 - 如何读取自定义文档属性

    我正在使用 Office JS API 开发 Word 插件 目前 我可以通过执行以下操作向 Word 文档添加自定义属性 context document properties load context document properti
  • 任务执行期间在任务窗格上滚动时工作表冻结

    我们正在使用office js API 开发一个office Addin 反复出现的问题损害了我们在店里的声誉 此问题是 Excel 插件 office js 中的工作表在滚动后被冻结 我编写了一个简单的脚本实验室片段代码 它重现了工作表冻
  • Office JavaScript API:突出显示文档中的文本

    我正在使用 Microsoft Office JavaScript API 开展一个业余项目 我一直依赖着文档 https learn microsoft com en us office dev add ins reference jav
  • 循环浏览 Excel Javascript API 中所有工作表的最佳方法?

    我想循环遍历工作簿中的每个工作表 并对每个工作表执行一项操作 例如 运行calculate 出于性能原因 我想将这一切都完成同步 请求 https learn microsoft com en us office dev add ins e
  • 具有图形 api 的 Outlook Web 插件

    我正在尝试制作 Outlook Web 插件 并希望在其中使用图形 api 如下所示单点登录文章 https learn microsoft com en us office dev add ins develop sso in offic
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • 在 Office UI Fabric 中导出到 Excel

    有没有导出到excel的功能办公室 UI 结构默认列表 我在官方文档中找不到它 不 目前没有这方面的功能 Office ui fabric 是用户界面主要关注用户体验设计 UX 而不是功能的库
  • Office JS Api - 权限被拒绝问题

    我正在开发 Excel 的插件 清单具有以下权限读写文档 我正在添加一个处理程序Office EventType DocumentSelectionChanged Event 第一次 我在 Excel Online 中插入插件 它运行得很好

随机推荐