Google apps script 电子邮件迁移API v2:Google应用程序脚本

Google apps script 电子邮件迁移API v2:Google应用程序脚本,google-apps-script,google-email-migration,Google Apps Script,Google Email Migration,我正试图写一篇GAS来迁移一些存储在Google Drive中的电子邮件,但我真的很难找到正确的帖子来做到这一点,我希望有人能帮助我,引导我朝着正确的方向前进 到目前为止我所知道的是 var id = "12345678abcdefgh"; var doc = DocumentApp.openById(id); var emlData = doc.getText(); var api_scope = 'https://www.googleapis.com/auth/email.m

我正试图写一篇
GAS
来迁移一些存储在
Google Drive
中的电子邮件,但我真的很难找到正确的帖子来做到这一点,我希望有人能帮助我,引导我朝着正确的方向前进

到目前为止我所知道的是

  var id = "12345678abcdefgh";
  var doc = DocumentApp.openById(id);
  var emlData = doc.getText();
  var api_scope = 'https://www.googleapis.com/auth/email.migration';
  var app_name = "migration";
  var userKey = "someone@mygappsdomain.com";
  var method = "POST";

  var url = "https://www.googleapis.com/upload/email/v2/users/"+userKey+"/mail?uploadType=multipart";


  var fields =  {"MailItem" : 
                  {"properties":
                   {'isInbox': 'true','isUnread': 'true'},
                   'labels': ['MigrateMe']}};

  var options = {payload: {data: JSON.stringify(emlData), fields: fields, contentType: 'multipart/related', boundary : 'part_boundary'}};
  var fetchArgs = googleOauth_(app_name,api_scope,method,options);
  try
  {
    var result = UrlFetchApp.fetch(url, fetchArgs).getResponseCode();
    Logger.log("done");
  }
  catch (ee) 
  {
    Logger.log(ee);
  }
}

这显然不起作用,我得到一个400错误代码。你知道可能有什么问题吗?

如评论中所述,这里有一个使用游乐场api的示例:

步骤1:
授权:

第二步:
授权BLBABLABLA(你知道在这里做什么)

第三步:
您需要向URL发送帖子:
EMAILADRESS@DOMAIN.EXT/mail

内容类型需要设置为:自定义…
这些论点是:

uploadType:media
Content-Type:message/rfc822
请求主体必须考虑以下内容:

Date: Wed, 03 Jan 2013 02:56:03 -0800
From: admin@example.org
To: liz@example.com
Subject: Hello World!
MIME-Version: 1.0
Content-Type: text/html; charset=windows-1252
Content-transfer-encoding: 8bit

And I think to myself... What a wonderful world!
(你可以拿这个做测试,然后在邮箱中搜索“liz”)

如果一切正常,你应该有这样的东西:

为此,我使用了这里的文档:


这不是你帖子的解决方案,但我希望它能帮助你得到它!(顺便说一句,如果你有一个很好的工作代码,请给出你问题的真实答案-我也很感兴趣)

脚本

我冒昧地在这里重新构建了您评论的不同部分:

var template=HtmlService.createTemplateFromFile(“MailTemplate”);
template.sentDate=“周三,2014年3月4日02:56:03-0800”;
template.from=“发件人。address@blahblah.com";
template.to=“收件人。address@blahblah.com";
template.subject=“第二次测试”;
template.body=“我是通过脚本迁移的!!!!”;
template.sentDate=eml\u sentDate;
template.from=eml\u from;
template.to=eml\u to;
template.subject=eml\u subject;
template.body=eml\u body;
var emlData=template.evaluate().getContent();
var api_scope='googleapis.com/auth/email.migration';;
var app_name=“迁移”;
var userKey=“收件人。address@blahblah.com";
var method=“POST”;
var url=“googleapis.com/upload/email/v2/users/”+userKey+“/…”;
var options={method:'POST',contentType:'message/rfc822',uploadType:'media',负载:emlData};
var fetchArgs=googleOauth(应用程序名称、api范围、方法);
fetchArgs.payload=emlData;
fetchArgs.contentType='message/rfc822';
fetchArgs.uploadType='media';
var result=UrlFetchApp.fetch(url,fetchArgs.getResponseCode();
多部分

我能给你的是dumultipart:它是一个脚本的一部分,该脚本专用于对googleapi执行批处理请求(它是为向google组添加用户而设计的)。批处理是通过一个多部分文件完成的,因此我认为它与您的邮件完全相同:

函数批处理请求(userArray,grpEmail){
var grpEmail=grpEmail | |”testgroup@domain.ext";
//变量postrl=”https://www.googleapis.com/admin/directory/v1/groups/“+grpEmail+”/成员”;
姿态变量https://www.googleapis.com/batch';
var accessToken=refreshAccessToken();
var userEmail=“”
变量边界='batch_foobarbaz';
var有效载荷=”;
for(userArray中的变量i){
有效负载+='-'+boundary+'\n内容类型:应用程序/http\n内容传输编码:二进制\n\n';
有效负载+='POST/admin/directory/v1/groups/'+grpEmail+'/members HTTP/1.1\n';
有效负载+='内容类型:application/json\n\n';
有效负载+='{“电子邮件”:“'+userArray[i]+',“角色”:“成员”}\n';
}
有效载荷+='-'+边界+'-';
变量参数={
方法:'POST',
contentType:'multipart/mixed;boundary=“”+boundary+”,
标题:{
授权:“OAuth”+accessToken
},
有效载荷:有效载荷,
muteHttpExceptions:true
}
var requestResponse=UrlFetchApp.fetch(postrl,params);
var result=requestResponse.getContentText();
Logger.log(requestResponse.getResponseCode()+“-”+结果);
返回(requestResponse.getResponseCode());
}

您是否尝试在api操场上使用它?我还看到你在代码多部分中的某个地方使用(据我所知,它对载波返回非常敏感-->因为我忘了一个小时而被卡住了)谢谢Harold,我将在操场上玩一玩,看看是否能让它在那里工作。我甚至不能让它在操场上工作。我想我可能不得不放弃这一点,令人沮丧的是,这是无法达到的。谢谢,这在操场上非常有效。我现在将把它转换成一个脚本,并让您知道最终的代码。非常感谢指针。谢谢Harold,我现在有了一个基本的工作脚本:)如果你能建议如何从这个脚本执行多部分操作,这样我就可以发送元数据(标签isInbox等),那么我将有一个最终的脚本。