【问题标题】:Email Migration API v2: Google Apps Script电子邮件迁移 API v2:Google Apps 脚本
【发布时间】:2014-11-30 10:42:19
【问题描述】:

我正在尝试编写 GAS 来迁移存储在 Google Drive 中的一些电子邮件,但我真的很难让 POST 正确执行此操作,并希望有人能帮助我并引导我正确方向。

到目前为止我所拥有的是..

  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 操场上工作吗? developers.google.com/oauthplayground 我还看到你在代码中的某处使用 multipart(因为我知道它对运营商退货非常敏感——> 因为我忘记了而卡住了几个小时)
  • 谢谢哈罗德,我会在操场上玩,看看能不能让它在那里工作。
  • 我什至无法让它在操场上工作。我想我可能不得不放弃这个,令人沮丧的是,它遥不可及。

标签: google-apps-script google-email-migration


【解决方案1】:

正如评论中所说,这里有一个使用 Playground api 的示例:

第 1 步:
授权:https://www.googleapis.com/auth/email.migration

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

第 3 步:
您需要 POST 到 hte URL:
https://www.googleapis.com/upload/email/v2/users/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”)

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

为此,我使用了此处的文档:
https://developers.google.com/admin-sdk/email-migration/v2/guides/upload
https://developers.google.com/admin-sdk/email-migration/v2/reference/mail/insert

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

【讨论】:

  • 谢谢,这在操场上效果很好。我现在将其转换为脚本并让您知道最终代码。非常感谢您的指点。
  • 谢谢你哈罗德,我现在有一个基本的工作脚本 :) 如果你能建议如何从中做一个多部分,以便我可以发送元数据(标签 isInbox 等),那么我将有一个最终脚本。 script.google.com/d/…
【解决方案2】:

脚本

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

var template = HtmlService.createTemplateFromFile("MailTemplate");
template.sentDate = "Wed, 04 Mar 2014 02:56:03 -0800";
template.from = "sender.address@blahblah.com";
template.to = "recipient.address@blahblah.com";
template.subject = "second test";
template.body = "I was migrated via script !!!!";
template.sentDate = eml_sentDate;
template.from = eml_from;
template.to = eml_to;
template.subject = eml_subject;
template.body = eml_body;
var emlData = template.evaluate().getContent();
var api_scope = 'googleapis.com/auth/email.migration';;
var app_name = "migration";
var userKey = "recipient.address@blahblah.com";
var method = "POST";

var url = "googleapis.com/upload/email/v2/users/" + userKey + "/…"; 
var options = { method : 'POST', contentType: 'message/rfc822', uploadType: 'media', payload: emlData };


var fetchArgs = googleOauth_(app_name, api_scope, method);
fetchArgs.payload = emlData;
fetchArgs.contentType = 'message/rfc822';
fetchArgs.uploadType = 'media';
var result = UrlFetchApp.fetch(url, fetchArgs).getResponseCode();

多部分

我可以给你的 du multipart:它是脚本的一部分,专门用于对 google api 进行批量请求(它旨在将用户添加到 google 组)。批处理是通过一个多部分文件完成的,所以我想这与您的邮件完全相同:

function batchRequest(userArray,grpEmail){
  var grpEmail = grpEmail || "testgroup@domain.ext";
  //var postUrl = "https://www.googleapis.com/admin/directory/v1/groups/"+grpEmail+"/members";
  var postUrl = 'https://www.googleapis.com/batch';
  var accessToken = refreshAccessToken();
  var userEmail = ""
  var boundary = 'batch_foobarbaz';
  var  payload = "";

  for(var i in userArray){
  payload+= '--'+boundary+'\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\n';
  payload+='POST /admin/directory/v1/groups/'+grpEmail+'/members HTTP/1.1\n';
  payload+= 'Content-type: application/json\n\n';
  payload+='{"email": "'+userArray[i]+'", "role": "MEMBER"}\n';
  }
  payload+='--'+boundary+'--';

   var params={
     method:'POST',
    contentType:'multipart/mixed; boundary="'+boundary+'"',
     headers:{
       Authorization:" OAuth "+accessToken  
     },
      payload:payload,
     muteHttpExceptions:true
   }
  var requestResponse = UrlFetchApp.fetch(postUrl, params);
  var result = requestResponse.getContentText();
  Logger.log(requestResponse.getResponseCode()+" - "+result);
  return(requestResponse.getResponseCode());

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多