Google admin sdk 使用C#APi进行迁移时出现错误500
**我尝试了一些方法,甚至运行了另一篇堆栈溢出文章中的示例,并不断收到相同的错误消息。我已经尝试直接从消息中使用字节数组。获取并转换为ASCCII,然后返回到字节。我有一个使用括号的消息id 下面是我的大部分代码Google admin sdk 使用C#APi进行迁移时出现错误500,google-admin-sdk,google-groups-migration,Google Admin Sdk,Google Groups Migration,**我尝试了一些方法,甚至运行了另一篇堆栈溢出文章中的示例,并不断收到相同的错误消息。我已经尝试直接从消息中使用字节数组。获取并转换为ASCCII,然后返回到字节。我有一个使用括号的消息id 下面是我的大部分代码 using Google.Apis.Admin.Directory.directory_v1; using Google.Apis.Auth.OAuth2; using Google.Apis.GroupsMigration.v1; using Google.Apis.Services
using Google.Apis.Admin.Directory.directory_v1;
using Google.Apis.Auth.OAuth2;
using Google.Apis.GroupsMigration.v1;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace GoogleEmailMigration
{
class Program
{
[STAThread]
static void Main(string[] args)
{
/*
* The purpose of this tool is to migrate users into groups in the google business panel
*/
Console.WriteLine("Group Migration Tool Using Google Client");
Console.WriteLine("====================");
try
{
UserCredential credential;
var one =FillCredential();
one.Wait();
credential = one.Result;
MigrationDetails detail = new MigrationDetails()
{
EmailUserName = "***",
Domain = "****",
GroupName = "***",
Password = "***"
};
detail.LoadGroupId(credential);
var service = new GroupsMigrationService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Switched On migration tool",
});
/*Download all emails messages */
GmailMessageProxy proxy = new GmailMessageProxy(){UserName = detail.EmailUserName+"@"+detail.Domain, Password=detail.Password};
proxy.ActOnMessagesText((message) =>
{
using (var mem = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(message)))
{
mem.Seek(0, SeekOrigin.Begin);
var uploadObject = service.Archive.Insert(detail.GroupId,mem,"message/rfc822");
var result = uploadObject.Upload();
Console.WriteLine("Status:");
Console.WriteLine(result.Status);
Console.WriteLine("Bytes:");
Console.WriteLine(result.BytesSent);
Console.WriteLine("Exception");
Console.WriteLine(result.Exception.Message);
}
}
, (ex) => Console.WriteLine(ex));
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
{
Console.WriteLine("ERROR: " + e.Message);
}
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
private static async Task<UserCredential> FillCredential()
{
UserCredential credential;
using (var stream = new FileStream(@"***", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { @"https://www.googleapis.com/auth/apps.groups.migration", DirectoryService.Scope.AdminDirectoryGroupReadonly, DirectoryService.Scope.AdminDirectoryUserReadonly, DirectoryService.Scope.AdminDirectoryUserschemaReadonly },
"user", CancellationToken.None, new FileDataStore("GroupsMigration"));
}
return credential;
}
}
使用Google.api.Admin.Directory.Directory\u v1;
使用Google.api.Auth.OAuth2;
使用Google.api.groupsmiglation.v1;
使用Google.api.Services;
使用Google.api.Util.Store;
使用制度;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用系统文本;
使用系统线程;
使用System.Threading.Tasks;
名称空间GoogleEmailMigration
{
班级计划
{
[状态线程]
静态void Main(字符串[]参数)
{
/*
*此工具的目的是将用户迁移到google business panel中的组中
*/
WriteLine(“使用Google客户端的组迁移工具”);
Console.WriteLine(“===============================”);
尝试
{
用户凭证;
var one=FillCredential();
一、等等;
凭证=一个。结果;
MigrationDetails=new MigrationDetails()
{
EmailUserName=“***”,
Domain=“****”,
GroupName=“***”,
Password=“***”
};
详细信息。LoadGroupId(凭证);
var service=new-GroupsMigrationService(new-BaseClientService.Initializer())
{
HttpClientInitializer=凭证,
ApplicationName=“已打开迁移工具”,
});
/*下载所有电子邮件和信息*/
GmailMessageProxy=new GmailMessageProxy(){UserName=detail.EmailUserName+“@”+detail.Domain,Password=detail.Password};
proxy.actonMessageText((消息)=>
{
使用(var mem=newmemorystream(ascienceoding.ASCII.GetBytes(message)))
{
mem.Seek(0,SeekOrigin.Begin);
var uploadObject=service.Archive.Insert(detail.GroupId,mem,“message/rfc822”);
var result=uploadObject.Upload();
Console.WriteLine(“状态:”);
控制台写入线(结果状态);
Console.WriteLine(“字节:”);
Console.WriteLine(result.bytesent);
控制台写入线(“例外”);
Console.WriteLine(result.Exception.Message);
}
}
,(ex)=>Console.WriteLine(ex));
}
捕获(聚合异常)
{
foreach(ex.InnerExceptions中的变量e)
{
Console.WriteLine(“错误:+e.Message”);
}
}
Console.WriteLine(“按任意键继续…”);
Console.ReadKey();
}
私有静态异步任务FillCredential()
{
用户凭证;
使用(var stream=newfilestream(@“***”,FileMode.Open,FileAccess.Read))
{
凭证=等待GoogleWebAuthorizationBroker.AuthorizationAsync(
GoogleClientSecrets.Load(stream.Secrets),
新[]{@”https://www.googleapis.com/auth/apps.groups.migration,DirectoryService.Scope.AdminDirectoryGroupReadonly,DirectoryService.Scope.AdminDirectoryUserReadonly,DirectoryService.Scope.AdminDirectoryUserSchemaAreaOnly},
“用户”,CancellationToken.None,新文件数据存储(“GroupsMigration”);
}
返回凭证;
}
}
}我设法解决了这个问题,上面代码中的这一行是错误的
var uploadObject = service.Archive.Insert(detail.GroupId,mem,"message/rfc822");
该api没有使用组电子邮件发送groupid,而是在google页面中提供的示例中使用了错误的描述
错误500并不能很好地描述问题,但经过大量的尝试和错误,这些都是我的发现