API Gmail не может получить все содержимое сообщения - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь прочитать письмо, используя Gmail API, в формате RAW и FULL.Для некоторых писем он не возвращает полное содержание письма в обоих форматах.Он содержит только часть заголовка, а не содержимое тела.Исходное письмо содержит данные в теле письма, но Gmail api не может их прочитать.Когда я пытаюсь сохранить тот же адрес электронной почты локально, он выдает ошибку «Недопустимое содержимое MIME»

Вот мой пример кода

     Email Emailobj              = null;                     
 UsersResource.MessagesResource.GetRequest MessageGetRequestObj = null;
 MessageGetRequestObj            = GmailServiceObj.Users.Messages.Get(UserEmailID, ItemID);
 MessageGetRequestObj.Format     = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
 MessageGetRequestObj.Fields     = "id,threadId,labelIds,internalDate,sizeEstimate,raw,payload";
 Emailobj                        =  MessageGetRequestObj.Execute();

В чем может быть проблема?Gmail api поддерживает зашифрованные письма?

1 Ответ

0 голосов
/ 21 июня 2019

Как указано в параметре формата здесь [1], вы можете извлечь только полные данные сообщения электронной почты в поле полезной нагрузки (если вы используете «полный» формат) или в необработанном поле (если вы используете «сырой» формат),

Если вы используете необработанный формат, вы можете получить полные данные сообщения электронной почты с содержимым тела в виде строки в кодировке base64url, например: Emailobj.Raw [2].

Если вы используете полныйформат, вы можете получить объект с полными данными сообщения электронной почты, включая тело, как это -> Emailobj.Payload, чтобы получить список заголовков -> Emailobj.Payload.Headers, чтобы получить объект тела -> Emailobj.Payload.Body.Проверьте часть полезной нагрузки [2] и как получить доступ к ее атрибутам [3].

Вы также можете использовать функцию «Попробуйте этот API» здесь [1], чтобы проверить структуру объекта Message [2]вы получаете, когда запускаете запрос.

Об ошибке, которая появляется при попытке «сохранить электронную почту локально», в зависимости от того, что вы подразумеваете под этим, у меня есть 2 ответа:

ЕслиВы хотите просто сохранить объект Message [2] в переменной Emailobj:

1) Ваш Emailobj является ссылкой на класс электронной почты (который, по-видимому, является вашим личным классом), поэтому вы не можете сохранитьКласс объекта сообщения из библиотеки Google в этой переменной, потому что у этого класса нет вашего личного класса в качестве родительского класса.Как указано в документации, класс Message наследуется только от интерфейса IDirectResponseSchema [2].Дальнейшая информация о наследовании здесь [4].

2) Если вы пытаетесь отправить электронное письмо на сервер / приложение:

Вы должны проверить, как целевой объект, в котором вы хотите хранить электронную почту, ожидает полные данные электронной почты, либозакодированная строка со всеми данными, объект в формате Json с определенной структурой заголовков и тела, BLOB-объекты и т. д.

EDIT

По мере необходимости отправлятьэто как EML, вы должны найти способ создать объект blob с «message / rfc2822» в качестве типа содержимого (mimeType) и необработанной строкой в ​​качестве данных, которые вы получили из опции необработанного формата Emailobj.Raw.Может быть, это поможет [5].

[1] https://developers.google.com/gmail/api/v1/reference/users/messages/get

[2] https://developers.google.com/resources/api-libraries/documentation/gmail/v1/csharp/latest/classGoogle_1_1Apis_1_1Gmail_1_1v1_1_1Data_1_1Message.html

[3] https://developers.google.com/resources/api-libraries/documentation/gmail/v1/csharp/latest/classGoogle_1_1Apis_1_1Gmail_1_1v1_1_1Data_1_1MessagePart.html

[4] https://www.codeproject.com/Articles/1445/Introduction-to-inheritance-polymorphism-in-C

[5] https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=linux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...