Gmail API - 国际标签问题(C#/。NET)

时间:2017-05-02 18:21:56

标签: c# .net google-api gmail-api google-api-dotnet-client

在使用多种(人类)语言创建标签时,将邮件项目迁移到Gmail邮箱时遇到了一些问题。请在提供答案之前阅读该方案。我为这篇文章的篇幅道歉。

方案

注意:我知道预定义的SYSTEM标签不能用作/重新创建为USER标签。我知道USER标签不能嵌套在SYSTEM标签下。我理解USER和SYSTEM标签之间的区别。奇怪的"平坦"需要使用嵌套标签语法生成并包含SYSTEM标签部分的标签(并且有效。)

通过调用以下内容来利用标签缓存。这样,不会尝试重新创建已存在的标签。缓存执行与Google.Apis.Gmail.v1.Data.Label.Name属性的比较。

UsersResource.LabelsResource.List(string userId)

根据系统或系统的配置,无论系统或系统的配置如何,都会根据邮件的提取位置生成标签。

  • 示例A:邮件消息存储在" C:\ Foo \ Bar"的磁盘上。生成的标签将是" Foo"和一个嵌套的标签" Bar"使用语法" Foo / Bar"
  • 示例B:邮件消息存储在Inbox / SomeNestedFolder的Exchange文件夹结构中。使用语法" Inbox / SomeNestedFolder"生成单个标签。这会创建一个不嵌套在INBOX SYSTEM标签下的USER标签。用户定义"收件箱"标签未创建,因为它已存在于缓存中。这是理想的。
  • 示例C:邮件消息存储在RandomTestFolder / ABC / Contacts的Exchange文件夹结构中。这将创建三个USER标签。首先是标签" RandomTestFolder。然后是一个嵌套的标签" ABC"在那下使用语法" RandomTestFolder / ABC"。然后最后使用语法" RandomTestFolder / ABC / Contacts"
  • 在嵌套标签下嵌套标签
  • 示例D:邮件消息存储在Exchange文件夹结构中" Posta in arrivo / Test"。这会导致尝试在到达时创建" Posta"标签是收件箱的意大利语。

    无法创建标签,毕竟它是一个SYSTEM标签。不期望的是该产品试图创建标签,因为它应该已经存在于缓存中。

进一步挖掘后,此缓存概念适用于英语环境,因为API提取/缓存的SYSTEM标签名称列表与用户邮箱中的标签名称相匹配。但是,在意大利语环境中,API调用会返回英语环境中的标签名称(和ID)。这导致产品尝试使用外语中的SYSTEM标签名称创建无效的标签。发生这种情况是因为缓存不包含使用英语的外语语言的SYSTEM标签名称。

其他

使用收件箱SYSTEM标签作为示例。 API将始终返回以下内容。

{
 "id": "INBOX",
 "name": "INBOX",
 "messageListVisibility": "hide",
 "labelListVisibility": "labelShow",
 "type": "system"
}


实施例B表明它可以制造"扁平"使用SYSTEM标签名称作为USER标签的一部分的标签。它还显示了使用SYSTEM标签名称制作嵌套的USER标签的可能性。

enter image description here


Gmail邮箱使用的语言与是否可以创建其他语言的SYSTEM标签无关。标签" Posta in arrivo"如果邮箱设置为英语或意大利语,则无法创建。

问题

似乎没有以编程方式处理API公开的此问题。应避免手动映射字符串的概念,以支持API本身提供的解决方案。

  1. 以编程方式检测并阻止尝试使用其他语言创建带有SYSTEM标签名称的标签的正确方法是什么?这是配置问题吗?是否需要切换某种映射或文化设置?

0 个答案:

没有答案