System.FormatException Декодирование необработанного поля сообщения Gmail

Я пытаюсь декодировать поле message.Raw следующим образом:

byte[] mailContent = Convert.FromBase64String(message.Raw);

но я получаю System.FormatException.

Что мне здесь не хватает? Необходимо сделать какой-то дополнительный шаг? Спасибо.

**Изменить:** сообщение. Необработанный контент слишком велик, чтобы публиковать его здесь, поэтому я загрузил пример.


person Daniel Marín    schedule 01.08.2014    source источник
comment
Вы уверены, что message.Raw находится в форме Base64? Добавьте свое строковое содержимое в вопрос.   -  person Yuval Itzchakov    schedule 01.08.2014
comment
Хорошо, для этого мне нужно создать новую учетную запись Gmail, потому что message.Raw напрямую возвращается API Gmail, поэтому он содержит электронные письма и другую важную информацию.   -  person Daniel Marín    schedule 01.08.2014
comment
Взгляните на оригинальный пост, который я только что отредактировал.   -  person Daniel Marín    schedule 01.08.2014
comment
Решение найдено здесь: stackoverflow.com/questions/24464866/   -  person Daniel Marín    schedule 01.08.2014
comment
Этот вопрос дублируется, но мне было очень сложно найти исходный вопрос (неверные теги и заголовок). Я не собираюсь удалять это, потому что это поможет людям найти ответ.   -  person Daniel Marín    schedule 14.10.2014


Ответы (2)


Поле message.Raw кодируется не только Base64, но и URL-safe.

Взгляните на этот вопрос: Код для декодирования/кодирования модифицированного URL-адреса base64

Исходный код взят из ссылки выше:

///<summary>
/// Base 64 Encoding with URL and Filename Safe Alphabet using UTF-8 character set.
///</summary>
///<param name="str">The origianl string</param>
///<returns>The Base64 encoded string</returns>
public static string Base64ForUrlEncode(string str)
{
    byte[] encbuff = Encoding.UTF8.GetBytes(str);
    return HttpServerUtility.UrlTokenEncode(encbuff);
}
///<summary>
/// Decode Base64 encoded string with URL and Filename Safe Alphabet using UTF-8.
///</summary>
///<param name="str">Base64 code</param>
///<returns>The decoded string.</returns>
public static string Base64ForUrlDecode(string str)
{
    byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
    return Encoding.UTF8.GetString(decbuff);
}
person EFrank    schedule 01.08.2014
comment
Да, я это уже читал, но HttpServerUtility.UrlTokenDecode(message.Raw); возвращает null - person Daniel Marín; 01.08.2014
comment
@Daniel Marin: Это странно, потому что я ничего не видел о возврате null в документации UrlTokenDecode. - person EFrank; 01.08.2014
comment
Это потому, что message.Raw имеет неправильный формат. В любом случае я нашел решение в этом сообщении: проблемы с чтением части текстового html-сообщения "> stackoverflow.com/questions/24464866/ - person Daniel Marín; 01.08.2014

Это потому, что message.Raw имеет неправильный формат. Я нашел решение в этом post.

person Daniel Marín    schedule 04.09.2014