2017-04-02 69 views
0

我只是想用我的最後一封電子郵件以ASP.NET MVC編程方式下載附件。GMAIL API .NET無效附件標記

至於我可以在這裏找到,我從谷歌唯一需要的權限爲「https://www.googleapis.com/auth/gmail.readonly」,授予我「閱讀所有資源及其元數據沒有寫入操作。」來源: (https://developers.google.com/gmail/api/auth/scopes

問題是,當我嘗試訪問連接我得到一個錯誤:

$exception 
{"Google.Apis.Requests.RequestError 
Invalid attachment token [400] 
Errors 
[Message[Invalid attachment token] 
Location[ - ] Reason[invalidArgument] 
Domain[global]\r\n]\r\n"} 

這是我的代碼的例子,到目前爲止:

static string[] Scopes = { GmailService.Scope.GmailReadonly }; 

    public ActionResult Login() 
    { 
     UserCredential credential; 
     var diskPath = Server.MapPath("~"); 

     using (var stream = new FileStream(diskPath + "/Content/client_secret.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       Scopes, 
       "user", 
       CancellationToken.None).Result; 
     } 

     // Create Gmail API service. 
     var service = new GmailService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = ApplicationName, 
     }); 

     var resp = service.HttpClient.GetStringAsync("https://www.googleapis.com/gmail/v1/users/me/messages?q=\"has:attachment\"").Result; 
     var root = JsonConvert.DeserializeObject<ListMessagesResponse>(resp); 
     foreach (var msg in root.Messages) 
      GetAttachments(service, msg.Id); 

     return View(); 
    } 

    public static void GetAttachments(GmailService service, String messageId) 
    { 
     var message = service.Users.Messages.Get("me", messageId).Execute(); 
     var parts = message.Payload.Parts; 
     foreach (var part in parts) 
     { 
      if (!String.IsNullOrEmpty(part.Filename)) 
      { 
       var attachPart = service.Users.Messages.Attachments.Get("me", messageId, part.PartId).Execute(); 
       var file = Convert.FromBase64String(attachPart.Data); 
       System.IO.File.WriteAllBytes(part.Filename, file); 
      } 
     } 
    } 

我得到這個錯誤,當我經過:

var attachPart = service.Users.Messages.Attachments.Get("me", messageId, part.PartId).Execute(); 

是否有任何其他適用範圍我必須輸入附件?或者我需要在一些操作後刷新令牌嗎?我已經嘗試刪除並在Google+個人資料中重新添加該應用!

回答

0

[MY ERROR]

代替:

var attachPart = service.Users.Messages.Attachments.Get("me", messageId, part.PartId).Execute(); 

我必須使用ATTACHMENT ID這樣的:

var attachPart = service.Users.Messages.Attachments.Get("me", messageId, part.Body.AttachmentId).Execute();